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

时间:2015-06-25 09:01:54

标签: 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(项目)吗?

1 个答案:

答案 0 :(得分:4)

您可以使用选项:

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)