在 CMake 中,有没有办法制作内置的 Find 脚本来优先考虑我们指定的自定义目录?因为特别是在 Windows 中,模块查找脚本通常无法检测到模块,例如 Visual Studio 目录。因此我通常必须手动设置外部库的路径,这非常累人。相反,我希望这些脚本在自定义目录中查找,比如说主项目中的“依赖项”文件夹,这样我就可以直接将这些外部文件放入该文件夹中,这比将它们放入 VC 文件夹或手动设置要容易得多路径。
Setting CMAKE_PREFIX_PATH https://cmake.org/cmake/help/latest/variable/CMAKE_PREFIX_PATH.html#variable:CMAKE_PREFIX_PATH变量正是用于这些目的:暗示find_*
关于搜索项目位置的功能。
虽然这个变量的描述没有注意到find_package
函数,变量影响它间接地: 大多数Find<name>.cmake
脚本使用查找库 https://cmake.org/cmake/help/v3.0/command/find_library.html and 查找路径 https://cmake.org/cmake/help/v3.0/command/find_path.html功能。注意,所有find_*
功能有精确的算法用于搜索项目,以及使用构建的路径CMAKE_PREFIX_PATH
在系统之前检查。
而且,CMAKE_PREFIX_PATH
影响其他一些搜索过程。例如,如果第 3 方包提供<name>Config.cmake
脚本而不是Find<name>.cmake
一,这个脚本也是使用这个变量来搜索的。pkg_check_模块 https://cmake.org/cmake/help/v3.0/module/FindPkgConfig.html还使用CMAKE_PREFIX_PATH
寻找.pc
描述包的文件。
CMAKE_PREFIX_PATH
变量可以设置为环境一(以取决于平台和特定于使用的方式),作为参数cmake
call:
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
多变的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)