我有一个基于 cmake 的项目,其结构如下:
Project A
|---lib B
|---lib C
所有3个项目(A
,B
和C
)都有CMakeLists.txt
,我在lib B
和lib C
中加入了project A
{1}} add_subdirectory
命令。
我还有project D
作为我所有3个项目(A
,B
和C
)的依赖项,我想通过{ExternalProject_Add
使用它{1}}命令。
有没有办法将它只包含在一个项目中,i。即我可以在其中一个项目中只构建一次project D
,并在其他项目中重复使用它吗?现在我只是在我的所有3个项目中包含project D
作为外部项目,但对我来说这似乎很奇怪。
答案 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
...