【问题标题】:CMake build subdirectory libraries as static onesCMake将子目录库构建为静态库
【发布时间】:2015-06-25 09:01:53
【问题描述】:

具有以下项目结构

CMakeLists.txt
libs\CMakeLists.txt

我有以下用例: CMakeLists.txt 描述了 MyLib 库的构建过程。这 libs\CMakeLists.txt 描述了 MyLib 使用的库的构建过程。主项目通过 add_subdirectory() 使用它。

我可以控制 MyLib 是共享库还是静态库:

cmake -DBUILD_SHARED=TRUE|FALSE

MyLib 使用的所有库都应该静态链接(MyLib 应该是一个“独立”库)。但我不想让它们在 libs\CMakeLists.txt 中显式静态

using add_library(... STATIC ...)

因为它们可以作为共享项目在其他项目中使用。

我可以控制如何构建我的 add_subdirectory(project) 吗?

【问题讨论】:

    标签: cmake shared-libraries static-libraries


    【解决方案1】:

    您可以使用一个选项:

    option(MYLIB_BUILD_STATIC   "Build libraries as static libraries" ON)
    
    # add/create library
    if (MYLIB_BUILD_STATIC)
        add_definitions(-DMYLIB_STATIC_BUILD)
        add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES})
    else (MYLIB_BUILD_STATIC)
        add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES})
    endif (MYLIB_BUILD_STATIC)
    

    【讨论】:

    • 没错。此外,您可以在不引入新变量的情况下通过即时更改和恢复 BUILD_SHARED_LIBS 来解决它。
    猜你喜欢
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 2022-01-21
    相关资源
    最近更新 更多