CMake ExternalProject_Add 和并行构建

Ben*_*rst 6 c++ makefile cmake parallel-builds

使用以下CMakeLists.txt构建脚本:

include( ExternalProject )
ExternalProject_Add( framework SOURCE_DIR ${framework_SOURCE}
                     PREFIX framework_build
                     INSTALL_DIR ${framework_DISTRIBUTION} )

    ...

add_library( ${PROJECT_NAME} SHARED ${BUILD_MANIFEST} )
add_dependencies( ${PROJECT_NAME} framework )
Run Code Online (Sandbox Code Playgroud)

当我尝试执行并行构建 ( make -j5) 时,它偶尔会由于框架中的构建工件不存在而失败。由 固定的构建顺序add_dependencies未得到遵守。

我是否误解了有关add_dependencies的文档

输出来自 cmake --graphviz=graph.dot

在此处输入图片说明

Ben*_*rst 2

好的,CMake 的更新版本警告我框架依赖项不存在。ExternalProject_Add 和 add_dependency 不能相互使用,因为ExternalProject_Add 尚未实际构建,因此尚未将框架注册为高级目标。

注意: 以后遇到此问题的任何人。我发现 @matiu 的另一篇SO 帖子 解决了我的问题。