gpt4 book ai didi

CMake 查找包文件,如何使用配置文件?

转载 作者:行者123 更新时间:2023-12-05 01:21:04 30 4
gpt4 key购买 nike

我有一个使用第 3 方库(我们称之为 somelib)的项目,我为此编写了一个 cmake 文件来搜索它。

这是我编写并放在/usr/local/lib/cmake/somelib/中的somelibConfig.cmake文件:

FIND_LIBRARY(somelib_LIBRARY somelib
PATHS /usr/local/lib
NO_DEFAULT_PATH
)
SET(somelib_LIBRARIES ${somelib_LIBRARY})
FIND_PATH(somelib_INCLUDE_DIR somelib.hpp
PATHS /usr/local/include/somelib
NO_DEFAULT_PATH
)
SET(somelib_INCLUDE_DIRS ${somelib_INCLUDE_DIR})

然后,如果我执行 find_package(somelib REQUIRED) 它工作正常。

但是,如果我将 somelibConfig.cmake 移动并重命名为 myproject/CMakeModules/Findsomelib.cmake(此目录将添加到 CMAKE_MODULE_PATH) ,在 find_package 之后我看到变量 somelib_INCLUDE_DIRSsomelib_LIBRARY 被正确填充,但是 somelib_FOUND 没有设置(甚至所以,find_package 不会中止编译)。

*Config.cmake 是否对 Find*.cmake 有效?

怎么可能设置了除*_FOUND 之外的所有变量?

如果未设置 *_FOUND,为什么带有 REQUIREDfind_package 不会中止编译?

最佳答案

配置文件和查找模块根本不同。

http://www.cmake.org/cmake/help/v3.0/manual/cmake-packages.7.html

只有 somelib 的开发人员会发布配置文件(如果他们这样做的话)。如果他们不这样做,那么您需要编写一个查找模块来查找 somelib。这样的查找模块不应像您那样复制到/usr/local。只需将它保留在您的项目中,并要求 somelib 开发人员发布一个配置文件即可。上游提供的配置文件优于查找您编写的模块。如果 somelib 上游不使用 cmake 也没关系。当使用非 cmake 构建系统时,Qt 和 LLVM 都会提供配置文件。

一个自卑的例子是,在编写查找模块时,您需要设置 _FOUND 变量。有关编写查找模块的更多信息,请参见此处:

http://www.cmake.org/cmake/help/v3.0/manual/cmake-developer.7.html#manual:cmake-developer%287%29

关于CMake 查找包文件,如何使用配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25854780/

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