在一个项目中,我有一个外部依赖项(一个库)。这是可选的,但不太可能已经在系统上,并且可能会发生很大变化

因此,我所做的就是对库进行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/

10-14 16:24