在 CMake 的 ExternalProject_Add 中配置构建过程

在 CMake 的 ExternalProject_Add 中配置构建过程

我有一个 C++ 项目(超级项目),它依赖于另一个我无法控制的项目(子项目)。为了能够构建我的项目,我需要先构建子项目,然后构建超级项目,它链接到子项目构建的库。

两个项目都使用 CMake 来配置相应的 Makefile。我必须手动将子项目下载到超级项目的子文件夹中(externals/Subproject),然后cd进入并externals/Subproject/build运行。cmake ..make target1

我想使用 ExternalProject_Add 功能在 Superproject CMakeLists 文件中自动执行此过程。到目前为止,我有类似

ExternalProject_Add(Subproject
    DOWNLOAD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/externals"
    GIT_REPOSITORY "git@path/to/repo/Subproject.git"
    GIT_TAG "master"
    SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/build"
)

它正确地下载并构建了all子项目的目标。但是当我尝试修改它以便只构建target1子项目的目标时,

ExternalProject_Add(Subproject
    DOWNLOAD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/externals"
    GIT_REPOSITORY "git@path/to/repo/Subproject.git"
    GIT_TAG "master"
    SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/build"
    BUILD_COMMAND "${MAKE} target1"
)

它无法执行make命令并抱怨/bin/sh不知道target1是什么。

我如何修改编译目标来ExternalProject_Add满足我的需要?

答案1

最后,我设法通过删除语句中的引号BUILD_COMMAND、将指令周围的花括号更改为圆括号MAKE以及禁用以下内容来解决问题INSTALL_COMMAND

ExternalProject_Add(Subproject
    DOWNLOAD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/externals"
    GIT_REPOSITORY "git@path/to/repo/Subproject.git"
    GIT_TAG "master"
    SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/build"
    BUILD_COMMAND $(MAKE) target1
    INSTALL_COMMAND "")

相关内容