提示查找<name>.cmake 文件与自定义目录

问题描述 投票:0回答:1

在CMake中,有没有办法制作内置的Find脚本来优先考虑我们指定的自定义目录?因为特别是在 Windows 中,模块查找脚本通常无法检测到模块,例如 Visual Studio 目录。因此我通常必须手动设置外部库的路径,这非常累人。相反,我希望这些脚本在自定义目录中查找,比如说主项目中的“依赖项”文件夹,这样我就可以直接将这些外部文件放入该文件夹中,这比将它们放入 VC 文件夹或手动设置要容易得多路径。

cmake
1个回答
24
投票

设置 CMAKE_PREFIX_PATH 变量正是用于这些目的:提示

find_*
函数有关搜索项目的位置。

虽然该变量的描述没有提及

find_package
函数,但该变量间接影响它:大多数
Find<name>.cmake
脚本使用 find_libraryfind_path 函数。请注意,所有
find_*
函数都具有针对搜索项的精确算法,并且使用
CMAKE_PREFIX_PATH
构建的路径会在系统路径之前进行检查。

此外,

CMAKE_PREFIX_PATH
还会影响其他一些搜索程序。例如,如果第 3 方包提供
<name>Config.cmake
脚本而不是
Find<name>.cmake
脚本,则也会使用此变量搜索该脚本。 pkg_check_modules 还使用
CMAKE_PREFIX_PATH
搜索描述包的
.pc
文件。

CMAKE_PREFIX_PATH
变量可以设置为环境一(以取决于平台和特定于使用的方式),作为
cmake
调用的参数:

cmake -DCMAKE_PREFIX_PATH=<additional-path> <other-parameters>

或在

CMakeLists.txt
文件内。在最后一种情况下,最好 append 搜索目录,这样你的包的用户也可以设置变量,以搜索未随项目附带的包:

list(APPEND CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/dependencies")

注意,变量

CMAKE_PREFIX_PATH
不会影响搜索
FindXXX.cmake
脚本本身。要指定脚本所在的目录,请使用
CMAKE_MODULE_PATH
变量。

© www.soinside.com 2019 - 2024. All rights reserved.