如何在cmake子目录中重用外部项目

时间:2016-02-18 17:46:39

标签: cmake

我有一个基于 cmake 的项目,其结构如下:

Project A
|---lib B
|---lib C

所有3个项目(ABC)都有CMakeLists.txt,我在lib Blib C中加入了project A {1}} add_subdirectory命令。

我还有project D作为我所有3个项目(ABC)的依赖项,我想通过{ExternalProject_Add使用它{1}}命令。

有没有办法将它只包含在一个项目中,i。即我可以在其中一个项目中只构建一次project D,并在其他项目中重复使用它吗?现在我只是在我的所有3个项目中包含project D作为外部项目,但对我来说这似乎很奇怪。

1 个答案:

答案 0 :(得分:1)

每个项目都可能检查某个变量(或目标)的存在。如果存在变量(目标),则项目将其用作projectD的引用,否则项目将使用projectD创建本地ExternalProject_Add

libB / CMakeLists.txt libC / CMakeLists.txt

if(NOT TARGET projectD)
    # If `projectD` is not created by upper level, create it locally
    ExternalProject_Add(projectD ...)
endif()
# Get properties of the external project, which are needed for linking.
ExternalProject_Get(projectD prop1 ... )
# Use properties
...

<强>的CMakeLists.txt

ExternalProject_Add(projectD ...)

add_subdirectory(libB) # libB will use our projectD's installation
add_subdirectory(libC) # libC will use our projectD's installation
...