c++ - 取决于 CMake 外部项目的 INSTALL 目标

标签 c++ cmake

有没有办法在 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/

相关文章:

c++ - vmime、libgnutls 和 libgcrypt 问题?断言失败!

c++ - 将模板参数解析为其序数索引

c++ - 前/后增量的左值和右值

c++ - 错误 1 ​​错误 C2678 : binary '!=' : no operator found which takes a left-hand operand of type 'std::ofstream' (or there is no acceptable conversion)

c++ - 我怎么能通过cmake执行exe(Qt3的uic)

cmake - 如何防止 Cmake 在 EXECUTABLE_OUTPUT_PATH 下创建 Debug/Release 文件夹?

c++ - 使用 CUDA 9.0RC 编译 OpenCV 3.3

C++ 或 Python : Bruteforcing to find text in many webpages

c++ - 如何简化此 cmake 文件?

c++ - CMake 从公共(public)源代码树生成多个项目的方法