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

时间:2016-01-14 17:22:33

标签: cmake

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

1 个答案:

答案 0 :(得分:6)

设置CMAKE_PREFIX_PATH变量完全符合以下目的:提示find_*函数有关搜索项目的位置。

虽然此变量的描述没有注明find_package函数,但变量会影响间接:大多数Find<name>.cmake脚本使用find_libraryfind_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变量。