在 CMake 中,CMAKE_PREFIX_PATH
、CMAKE_MODULE_PATH
、CMAKE_FIND_ROOT_PATH
、find_package
的 PATHS
和 HINTS
选项都是用于指定查找库和包的路径,但它们的用途和优先级有所不同。下面是它们之间的区别和推荐使用的场景:
-
CMAKE_PREFIX_PATH
用途:用于指定查找包时的前缀路径。CMake 会在这些路径下查找包的配置文件(例如
Find<Package>.cmake
或<Package>Config.cmake
)。
优先级:在查找时,CMAKE_PREFIX_PATH
中的路径会被优先考虑。
推荐使用场景:当你有多个安装位置或需要指定特定的库路径时,可以使用这个变量。 -
CMAKE_MODULE_PATH
用途:用于指定 CMake 模块的查找路径,主要是用于查找
Find<Package>.cmake
文件。
优先级:在查找时,CMAKE_MODULE_PATH
中的路径会被优先考虑,但通常优先级低于CMAKE_PREFIX_PATH
。
推荐使用场景:当你有自定义的查找模块或需要使用特定的 Find 模块时,可以使用这个变量。 -
CMAKE_FIND_ROOT_PATH
用途:用于指定交叉编译时的查找根路径。CMake 会在这些路径下查找库和头文件。
优先级:在交叉编译时使用,通常与CMAKE_FIND_ROOT_PATH_MODE_PACKAGE
和CMAKE_FIND_ROOT_PATH_MODE_LIBRARY
等变量结合使用。
推荐使用场景:在进行交叉编译时,指定目标平台的库和头文件路径。 -
find_package
的PATHS
和HINTS
选项PATHS
:用于指定查找包时的路径,优先级高于默认路径,但低于CMAKE_PREFIX_PATH。 HINTS:用于提供额外的提示路径,优先级低于 CMAKE_PREFIX_PATH
和PATHS
,但高于默认路径。
推荐使用场景:当你在调用find_package
时希望临时指定查找路径,可以使用PATHS
和HINTS
选项。
总结
推荐使用:
如果你需要全局设置查找路径,使用 CMAKE_PREFIX_PATH。
如果你有自定义的查找模块,使用 CMAKE_MODULE_PATH。
在交叉编译时,使用 CMAKE_FIND_ROOT_PATH。
在特定的 find_package 调用中,使用 PATHS 和 HINTS 选项。
根据具体的需求选择合适的选项,以确保 CMake 能够正确找到所需的库和包。