在CMake中,有没有办法制作内置的Find脚本来确定我们指定的自定义目录的优先级?因为特别是在Windows中,模块查找脚本通常无法检测到例如可视工作室目录中的模块。因此,我通常必须手动设置外部库的路径,这是非常累人的。相反,我希望这些脚本能够查看自定义目录,让我们说“依赖”。首先在主项目中放置文件夹,以便我可以直接将这些外部文件放在该文件夹中,这比将它们放入VC文件夹或手动设置路径要容易得多。
答案 0 :(得分:6)
设置CMAKE_PREFIX_PATH变量完全符合以下目的:提示find_*
函数有关搜索项目的位置。
虽然此变量的描述没有注明find_package
函数,但变量会影响间接:大多数Find<name>.cmake
脚本使用find_library和find_path功能。请注意,所有find_*
函数都有精确算法用于搜索项目,并且使用CMAKE_PREFIX_PATH
构建的路径在系统之前进行检查。
此外,CMAKE_PREFIX_PATH
会影响其他一些搜索程序。例如,如果3d party包提供<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
个文件。在最后一种情况下,最好追加搜索目录,因此您的用户包也可以为您的项目未附带的搜索包设置变量:
list(APPEND CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/dependencies")
注意,变量CMAKE_PREFIX_PATH
不会影响搜索FindXXX.cmake
脚本本身。要指定脚本所在的目录,请使用CMAKE_MODULE_PATH
变量。