CMake 将子目录库构建为静态库

标签 cmake shared-libraries static-libraries

具有以下项目结构

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) 的构建方式吗?

最佳答案

您可以使用一个选项:

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)

关于CMake 将子目录库构建为静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31045775/

相关文章:

c++ - 如何在 windows/msvs 上的同一个 cmake 项目中构建可执行文件和共享库

c++ - 通过使用特定于平台的项目文件或使用项目生成器来构建自动化?

.net - 针对移动设备和桌面设备进行开发

c++ - 我可以用静态版本替换共享库依赖项吗?

c++ - CMake/JOM 不能并行构建

CMake 自动识别新的文件扩展名

c++ - 如何从共享库中删除 *ALL* 未使用的符号?

centos 5.3内置的c所以加载到centos 6.3

C++:引用静态库的静态库

c++ - 库设计 : Hiding dependencies