我有一个 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 "")