在CMake中,有没有办法制作内置的Find脚本来优先考虑我们指定的自定义目录?因为特别是在 Windows 中,模块查找脚本通常无法检测到模块,例如 Visual Studio 目录。因此我通常必须手动设置外部库的路径,这非常累人。相反,我希望这些脚本在自定义目录中查找,比如说主项目中的“依赖项”文件夹,这样我就可以直接将这些外部文件放入该文件夹中,这比将它们放入 VC 文件夹或手动设置要容易得多路径。
设置 CMAKE_PREFIX_PATH 变量正是用于这些目的:提示
find_*
函数有关搜索项目的位置。
虽然该变量的描述没有提及
find_package
函数,但该变量间接影响它:大多数 Find<name>.cmake
脚本使用 find_library 和 find_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
变量。