Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake将子目录库构建为静态库_Cmake_Shared Libraries_Static Libraries - Fatal编程技术网

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

CMake将子目录库构建为静态库,cmake,shared-libraries,static-libraries,Cmake,Shared Libraries,Static Libraries,采用以下项目结构 CMakeLists.txt libs\CMakeLists.txt 我有以下用例: CMakeLists.txt描述了MyLib库的构建过程。这个 libs\CMakeLists.txt描述MyLib使用的库的构建过程。它由带有add_子目录()的主项目使用 我可以控制MyLib是共享库还是静态库,包括: cmake -DBUILD_SHARED=TRUE|FALSE MyLib使用的所有lib都应该静态链接(MyLib应该是一个“独立”库)。但我不想在libs\CMak

采用以下项目结构

CMakeLists.txt
libs\CMakeLists.txt
我有以下用例: CMakeLists.txt描述了MyLib库的构建过程。这个 libs\CMakeLists.txt描述MyLib使用的库的构建过程。它由带有add_子目录()的主项目使用

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

cmake -DBUILD_SHARED=TRUE|FALSE
MyLib使用的所有lib都应该静态链接(MyLib应该是一个“独立”库)。但我不想在libs\CMakeLists.txt中显式地将它们设置为静态

using add_library(... STATIC ...)
因为它们可以作为共享项目在其他项目中使用

我可以控制如何生成我的add_子目录(项目)吗?

您可以使用一个选项:

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,您可以在不引入新变量的情况下解决此问题。