gpt4 book ai didi

cmake - 排除 cmake 自带的分发模块 `find_package()`

转载 作者:行者123 更新时间:2023-12-04 08:26:40 25 4
gpt4 key购买 nike

Cmake 包括各种分发模块(即,填充在 cmake 安装的 Modules/ 目录中;例如,/usr/share/cmake-3.5/Modules/FindBoost.cmake )。
这在开发包含名称与这些分发模块冲突的内部库的代码时产生了挑战,如 find_package(Xyz)查找分发模块 ( /usr/share/cmake-3.5/Modules/FindXyz.cmake ) 而不是用户模块 ( /home/user/opt/lib/cmake/Xyz-config.cmake )。我试过设置CMAKE_FIND_ROOT_PATHCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY ,但无济于事。
如何在评估 find_package() 时强制 cmake 排除其自己的分发模块?

最佳答案

作为 作者 在项目中,您可能会发现“旧版”查找脚本(FindXXX.cmake)不适合您,而是更喜欢使用“现代”配置脚本(XXXConfig.cmakeconfig-xxx.cmake)。在这种情况下,您可以通过额外的 CONFIGNO_MODULE find_package 的选项:

find_package(Boost NO_MODULE)
这将阻止 CMake 搜索 FindBoost.cmake脚本并强制其搜索 BoostConfig.cmake (或 config-boost.cmake )。
如果无法使用 NO_MODULE 找到配置脚本或 CONFIG选项,则即使存在对应的查找脚本,CMake 也会报错。
或者,您可以设置 CMAKE_FIND_PACKAGE_PREFER_CONFIG多变的:
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
所以 CMake 会先检查配置脚本。但是如果缺少这个脚本,那么 CMake 会尝试使用 find 脚本。

作为 用户 在项目中,您可能会发现某些包的配置脚本比找到的更好...但最好是 什么都不做在这种情况下:可能是您正在使用的项目只能与 find 脚本一起使用,而不能与配置之一一起使用。 (例如,该项目使用 变量 ,由 find 脚本创建以引用库,但配置脚本通常创建 IMPORTED 目标 )。

关于cmake - 排除 cmake 自带的分发模块 `find_package()`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65223731/

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