取决于CMake外部项目的INSTALL目标
Depending on the INSTALL target of a CMake External Project
是否有方法在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.所以没有被找到,因为它还没有被安装,因此直到运行make-install之后的,myProgram的上游依赖关系才得到满足。
换句话说,我希望构建脚本首先下载并安装,然后是依赖项,然后尝试查找下游构建步骤所需的库的位置。这可能与cmake有关吗?或者我应该以其他方式实现这个目标吗?
从单独的CMakeLists.txt
构建并安装leptonica
。或者,您可以使用相同的CMakeLists
,并使用控制变量(-DMYPROJECT_INSTALL_DEPS=1
)选择性地启用CMakeLists
的ExternalProject
-部分或主部分
您可以从shell脚本触发leptonica
的配置/构建步骤,也可以使用execute_process
:从主CMakeLists
调用cmake
execute_process(
COMMAND ${CMAKE_COMMAND} -H... -B...
COMMAND ${CMAKE_COMMAND} --build ... --target install ...
)
这样,整个配置/构建/安装步骤将在主项目的配置步骤中执行。
相关文章:
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++A*算法并不总是在路径中具有目标节点
- 基于树莓pi的tensorflow lite量化ssd目标检测
- 为测试目标创建具有不同源文件夹的文件
- 使用源向量作为目标
- 是否可以用C++/WinRT将windows 10.0.14393作为目标
- 在 CMake 中为每个目标设置编译器/链接器标志
- CMake "--target install"无需"--build"命令行
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 CMake 中对目标依赖项进行分组?
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 如何为包含头文件的目标编写生成文件?
- 如何将C++11旗帜传递给"npm install"?
- 线性优化目标函数中的绝对值
- 制作文件:没有规则来制定目标:如何设置正确的规则?
- 字符串函数在目标C++上运行时C++返回空
- 如何定义自定义生成配置类型,其中通常是.exe的目标改为 DLL
- CMake-install(目标在子目录中)
- CMake:如何指定"install"所依赖的目标?
- 取决于CMake外部项目的INSTALL目标