我们的CMake项目托管在GitHub上,具有CMake git子模块作为依赖项。那么,文件结构大致为:
project/
CMakeLists.txt
extern/
big_lib/
CMakeLists.txt
include/
*.hpp
static/
CMakeLists.txt
shared/
CMakeLists.txt
我们拥有project
和big_lib
的著作权。
CMakeLists.txt
的最高级别project
包括以下内容:
add_subdirectory(${PROJECT_SOURCE_DIR}/extern/big_lib)
target_link_libraries(${PROJECT_NAME} big_lib::static)
big_lib::static
是我们不安装/发布的库; big_lib
配置中没有指定它,它仅用于内部使用-即用于测试。我们提供了面向客户的共享库,但是共享库不适用于project
。
这就是为什么ExternalProject_Add
可能不是满足我们依赖关系的最合适解决方案的原因-因为我的理解是,在构建目录中安装依赖关系不会安装我们需要的特定构建目标。另外,我还没有运气让它工作。
我还注意到,我们正在big_lib
中建立所有目标,其中有数百个-主要是测试,并且是我不需要或不需要的共享库。我怀疑这是因为我们要从其基本目录中包含整个库。
我尝试过:
add_subdirectory(${PROJECT_SOURCE_DIR}/extern/big_lib/static)
但是似乎big_lib
基本目录中的配置现在未指定,这就是为什么我将基本目录包括在project
中的原因。
所以我的问题是:
是否有更好的方法指定静态构建目标,以便仅构建目标?
是否有更好的方法来组织big_lib
的配置,因此我只能将静态库添加为依赖项文件夹,而不能从静态和共享之间的基本目录中复制配置?
我不知道哪些选项?也许我应该使用ExternalProject_Add并指定某种自定义构建命令,在该命令中,我仅发出静态lib作为构建目标并安装目标,然后针对该工件进行链接?