想让独立的程序与cmake

Want to make standalone program with cmake

本文关键字:cmake 程序 独立      更新时间:2023-10-16

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

它在我的电脑上运行得很好,但在别人的电脑上却不行。

我猜原因是我安装了程序需要的所有库,而其他人没有。

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

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


projectDef。源码

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)

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()

尝试在根目录CMakeLists.txt中使用这些选项:

set(BUILD_SHARED_LIBS OFF)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")

BUILD_SHARED_LIBS只有在你的项目有自己的库(add_library)时才需要。

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