CMake 将子目录库构建为静态库
CMake build subdirectory libraries as static ones
具有以下项目结构
CMakeLists.txt
libs\CMakeLists.txt
我有以下用例:
CMakeLists.txt描述了MyLib库的构建过程。这
libs\CMakeLists.txt 描述了 MyLib 使用的库的构建过程。主项目使用 add_subdirectory().
我可以控制 MyLib 是共享库还是静态库:
cmake -DBUILD_SHARED=TRUE|FALSE
MyLib 使用的所有库都应该静态链接(MyLib 应该是一个 "standalone" 库)。但我不想在 libs\CMakeLists.txt
中将它们显式设为静态
using add_library(... STATIC ...)
因为它们可以作为共享项目在其他项目中使用。
我可以控制我的 add_subdirectory(项目)的构建方式吗?
您可以使用一个选项:
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)
具有以下项目结构
CMakeLists.txt
libs\CMakeLists.txt
我有以下用例: CMakeLists.txt描述了MyLib库的构建过程。这 libs\CMakeLists.txt 描述了 MyLib 使用的库的构建过程。主项目使用 add_subdirectory().
我可以控制 MyLib 是共享库还是静态库:
cmake -DBUILD_SHARED=TRUE|FALSE
MyLib 使用的所有库都应该静态链接(MyLib 应该是一个 "standalone" 库)。但我不想在 libs\CMakeLists.txt
中将它们显式设为静态using add_library(... STATIC ...)
因为它们可以作为共享项目在其他项目中使用。
我可以控制我的 add_subdirectory(项目)的构建方式吗?
您可以使用一个选项:
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)