如何将特定的CMake目标指定为依赖项?

时间:2019-09-16 20:53:51

标签: cmake

我们的CMake项目托管在GitHub上,具有CMake git子模块作为依赖项。那么,文件结构大致为:

project/
  CMakeLists.txt
  extern/
    big_lib/
      CMakeLists.txt
        include/
          *.hpp
        static/
          CMakeLists.txt
        shared/
          CMakeLists.txt

我们拥有projectbig_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作为构建目标并安装目标,然后针对该工件进行链接?

0 个答案:

没有答案