取决于CMake外部项目的INSTALL目标

时间:2015-06-29 13:41:47

标签: c++ cmake

有没有办法在 cmake 中识别目标安装步骤的依赖关系?这是我的情况:

我的目标是能够下载此项目的源代码并在不首先安装依赖项的情况下构建它。换句话说,我希望在尝试构建主目标之前识别和安装依赖项。例如,我正在努力将Leptonica作为一个外部项目:

Serializable

运行目标 leptonica 正确构建并将库安装到临时目录中,使其可供其他目标使用:

Serializable

问题在于,当 / tmp 被清除并且 cmake 首次执行时,目标为 myProgram liblept。所以找不到因为它还没有被安装,因此 myProgram 的上游依赖性已经满足,直到之后 strong> make install 已运行。

换句话说,我希望构建脚本首先下载并安装依赖项,然后尝试查找下游构建步骤所需库的位置。这可能与 cmake 有关,还是我应该以其他方式实现这一目标?

1 个答案:

答案 0 :(得分:1)

从单独的leptonica构建并安装CMakeLists.txt。或者,您可以使用相同的CMakeLists,并使用控制变量(ExternalProject)选择性地启用CMakeLists - 部分或-DMYPROJECT_INSTALL_DEPS=1的主要部分

您可以从shell脚本触发leptonica的配置/构建步骤,或者使用cmake从主CMakeLists调用execute_process

    execute_process(
        COMMAND ${CMAKE_COMMAND} -H... -B...
        COMMAND ${CMAKE_COMMAND} --build ... --target install ...
    )

这样,整个配置/构建/安装步骤将在主项目的配置步骤中执行。