gpt4 book ai didi

c++ - 如何仅在构建阶段执行 cmake::find_package

转载 作者:搜寻专家 更新时间:2023-10-31 02:10:35 25 4
gpt4 key购买 nike

我正在尝试将基于 cmake 的项目包含在库 vlc-qt 中,作为来自 github 存储库的外部项目。

项目使用推荐方式:

FIND_PACKAGE(VLCQt REQUIRED COMPONENTS Widgets)

cmake 在配置阶段执行此命令,因此您会看到库不是在那一刻构建的。

避免这种情况的正确方法是什么?

最佳答案

使用ExternalProject_Add 将您自己的项目和VLCQt 项目放入外部项目中。并创建一个顶级 CMakeLists.txt 文件来一个接一个地构建它们。

您的目录结构将如下所示:

ProjectRoot/
|-- CMakeLists.txt
|-- MyProject/
| |-- sources/
| `-- CMakeLists.txt
`-- modules/
|-- MyProject.cmake
`-- ExternalVLCQt.cmake

ProjectRoot/modules/ExternalVLCQt.cmake 可能如下所示:

set(VLCQT_ROOT ${EXT_INSTALL_PATH}/vlcqt CACHE INTERNAL "")

ExternalProject_Add(vlcqt
URL "http://url.of.source/release.0.1.tar.gz"
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${VLCQT_ROOT}
INSTALL_COMMAND make install
)

list(APPEND GLOBAL_THIRDPARTY_LIB_ARGS "-DVLCQT_ROOT:PATH=${VLCQT_ROOT}")

ProjectRoot/modules/MyProject.cmake 可能如下所示:

ExternalProject_Add(my_project
DEPENDS vlcqt
SOURCE_DIR ${CMAKE_SOURCE_DIR}/MyProject
CMAKE_ARGS
${GLOBAL_THIRDPARTY_LIB_ARGS}
-DCMAKE_INSTALL_PREFIX=${EXT_INSTALL_PATH}/my_project
BUILD_COMMAND make
)

最后 ProjectRoot/CMakeLists.txt 应包含以下内容:

cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
project(MyProject VERSION 0.1)

set(CMAKE_MODULE_PATH
"${CMAKE_CURRENT_SOURCE_DIR}/modules"
${CMAKE_MODULE_PATH}
)

include(ExternalProject)

set_directory_properties(PROPERTIES EP_BASE ${CMAKE_BINARY_DIR}/ExtProjects)
get_directory_property(EXT_BASE_PATH EP_BASE)

set(EXT_INSTALL_PATH ${EXT_BASE_PATH}/Install)

include(ExternalVLCQt)
include(MyProject)

install(DIRECTORY ${EXT_INSTALL_PATH}/my_project DESTINATION .)

您可以阅读有关此模式的更多信息 here .通过这种模式,ProjectRoot/MyProject/CMakeLists.txt 将在 vlcqt 之后的顶级 CMakeLists.txt 的构建时配置建成。因此 find_package 将找到 VLCQt 包。

注意:在我的示例中,VLCQT_ROOT 将由 MyProjectCMakeLists.txt 接收,其中find_package 命令被使用。此变量是 find_package 命令的提示,对于不同的包,这可能会有所不同。 find_package 使用的每个 CMake 模块都有自己的可变要求。

关于c++ - 如何仅在构建阶段执行 cmake::find_package,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44990964/

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