在一个项目中,我有一个外部依赖项(一个库)。这是可选的,但不太可能已经在系统上,并且可能会发生很大变化
因此,我所做的就是对库进行find_package
编码,如果找不到该库(包括特定版本),我从Github下载它,并在其上调用add_subdirectory
(下载可确保该版本正确)
但是,这可能由于该库的未满足依赖关系而失败,从而使整个构建失败。
有没有办法尝试包含子目录并在没有构建失败的情况下捕获失败?
注意:该故障来自子模块中的find_package(...REQUIRED)
。
最佳答案
您可以修改子包的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()
。关于cmake - 可选的add_sub目录(如find_package),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51999609/