有没有办法在 cmake 中识别目标安装步骤的依赖关系?这是我的情况:
我的目标是能够下载该项目的源代码并构建它,而无需先安装依赖项。换句话说,我希望在尝试构建主要目标之前识别并安装依赖项。例如,我正在努力将 Leptonica 作为外部项目包括在内:
set(leptonica_build "${CMAKE_CURRENT_BINARY_DIR}/leptonica")
ExternalProject_Add(
leptonica
DOWNLOAD_DIR ${download_dir}
BINARY_DIR ${leptonica_build}
GIT_REPOSITORY ${OpenCV_git_repository}
GIT_TAG ${OpenCV_git_tag}
TLS_VERIFY true
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${DOC_READER_INSTALL_PREFIX}
)
运行目标 leptonica 正确构建库并将其安装到临时目录中,使其可供其他目标使用:
add_dependencies(myProgram leptonica)
find_library(LEPT_LIB lept)
target_link_libraries(myProgram ${LEPT_LIB})
问题是,当 /tmp 被清除并且 cmake 首先以 myProgram 的目标执行时,liblept。 so 未找到,因为它尚未安装,因此 myProgram 的上游依赖项在 make 之前尚未满足安装 已运行。
换句话说,我希望构建脚本首先下载并安装依赖项,然后尝试查找下游构建步骤所需的库的位置。这可能与 cmake 相关,还是我应该通过其他方式实现此目标?
最佳答案
从单独的 CMakeLists.txt
构建并安装 leptonica
。或者,您可以使用相同的 CMakeLists
并使用控制变量(-DMYPROJECT_INSTALL_DEPS=1
)
您可以从 shell 脚本触发 leptonica
的配置/构建步骤,或者使用 execute_process 从主
:CMakeLists
调用 cmake
execute_process(
COMMAND ${CMAKE_COMMAND} -H... -B...
COMMAND ${CMAKE_COMMAND} --build ... --target install ...
)
这样整个配置/构建/安装步骤将在主项目的配置步骤中执行。
关于c++ - 取决于 CMake 外部项目的 INSTALL 目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31117283/