gpt4 book ai didi

CMake:如何构建外部项目并包含其目标

转载 作者:行者123 更新时间:2023-12-03 04:52:06 29 4
gpt4 key购买 nike

我有一个项目 A,它将静态库导出为目标:

install(TARGETS alib DESTINATION lib EXPORT project_a-targets)
install(EXPORT project_a-targets DESTINATION lib/alib)

现在我想使用项目 A 作为项目 B 的外部项目并包含其构建目标:

ExternalProject_Add(project_a
URL ...project_a.tar.gz
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/project_a
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
)

include(${CMAKE_CURRENT_BINARY_DIR}/lib/project_a/project_a-targets.cmake)

问题是项目B的CMakeLists运行时,include文件还不存在。

有没有办法使包含依赖于正在构建的外部项目?

更新:我写了一篇短文CMake by Example tutorial基于这个问题和我遇到的其他常见问题。

最佳答案

我认为你在这里混淆了两种不同的范例。

正如您所指出的,高度灵活的 ExternalProject模块在构建时运行其命令,因此您无法直接使用项目 A 的导入文件,因为它仅在安装项目 A 后创建。

如果您想要包含项目 A 的导入文件,您必须在调用项目 B 的 CMakeLists.txt 之前手动安装项目 A - 就像任何其他第三方一样 -通过这种方式或通过 find_file/find_library/find_package 添加方依赖项。

如果您想使用 ExternalProject_Add,您需要将如下内容添加到 CMakeLists.txt 中:

ExternalProject_Add(project_a
URL ...project_a.tar.gz
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/project_a
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
)

<strike>include(${CMAKE_CURRENT_BINARY_DIR}/lib/project_a/project_a-targets.cmake)</strike>

ExternalProject_Get_Property(project_a install_dir)
include_directories(${install_dir}/include)

add_dependencies(project_b_exe project_a)
target_link_libraries(project_b_exe ${install_dir}/lib/alib.lib)

关于CMake:如何构建外部项目并包含其目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15175318/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com