在一个项目中,我有一个外部依赖项(一个库)。这是可选的,但不太可能已经在系统上,并且可能会发生很大变化
所以我所做的就是find_package
库,如果找不到该库(包括特定版本),我从Github下载它,并在其上调用add_subdirectory
(下载可以确保该版本是正确的)
但是,由于未满足该库的依赖性而导致整个构建失败,这可能会失败。
有没有办法尝试包含子目录并在没有构建失败的情况下捕获失败?
注意:故障来自子模块中的find_package(...REQUIRED)
。
答案 0 :(得分:1)
您可以修改子包的CMakeLists.txt来检查它是否作为另一个项目的一部分而构建,然后优雅地处理其未满足的依赖项。
要检查使用情况
if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
# standalone build
else()
# build as subdirectory of main project
endif()
要早日返回,请尝试return()。
如果您无法更改子包,我看到的唯一方法是在主CMakeLists.txt中检查其所有依赖项,并且只有在满足所有依赖项后,才调用add_subdirectory()
。