想用cmake制作独立程序

Oz6*_*848 5 c++ linux cmake static-linking

我的程序使用 giblib 和 Imlib2 库,它是用 cmake 构建的。

它在我的电脑上完美运行,但在其他电脑上却没有。

我想原因是我安装了我的程序需要的每个库,但其他库没有。

我的目标是制作独立程序。(不需要额外安装任何其他库)

我应该在cmake文件中添加什么?


projectDef.cmake 源代码

file (GLOB PLATFORM RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
    X11/[^.]*.cpp
    X11/[^.]*.h
    X11/[^.]*.cmake
    )

SOURCE_GROUP(X11 FILES ${PLATFORM})

add_definitions(
)

set (SOURCES
    ${SOURCES}
    ${PLATFORM}
    )

add_x11_plugin(${PROJECT_NAME} SOURCES)

target_link_libraries(${PROJECT_NAME}
    ${PLUGIN_INTERNAL_DEPS}
    )

include_directories(/usr/include/giblib)
include_directories(/usr/include/X11)

target_link_libraries(MyProject X11)
target_link_libraries(MyProject Imlib2)
target_link_libraries(MyProject giblib)
Run Code Online (Sandbox Code Playgroud)

CMakeList.txt 源代码

cmake_minimum_required (VERSION 2.6)
set (CMAKE_BACKWARDS_COMPATIBILITY 2.6)
set(BUILD_SHARED_LIBS OFF)
set(CMAKE_EXE_LINKER_FLAGS "-static")

Project(${PLUGIN_NAME})

file (GLOB GENERAL RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
    [^.]*.cpp
    [^.]*.h
    [^.]*.cmake
    )

include_directories(${PLUGIN_INCLUDE_DIRS})


SET_SOURCE_FILES_PROPERTIES(
    ${GENERATED}
    PROPERTIES
        GENERATED 1
    )

SOURCE_GROUP(Generated FILES
    ${GENERATED}
    )

SET( SOURCES
    ${GENERAL}
    ${GENERATED}
    )

include_platform()
Run Code Online (Sandbox Code Playgroud)

Lar*_*ars 5

尝试从根 CMakeLists.txt 中的以下选项开始:

set(BUILD_SHARED_LIBS OFF)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")
Run Code Online (Sandbox Code Playgroud)

仅当您的项目有自己的库( add_library )时才需要BUILD_SHARED_LIBS

使用-static链接器标志,您还需要所有附加库的静态库!静态链接时的一个常见问题是避免循环依赖