默认情况下,如何将 find_package() 搜索限制为 CMAKE_MODULE_PATH?
How to limit find_package() search to CMAKE_MODULE_PATH by default?
我想模块化我的项目并使用 find_package
来控制 3rdparty 包含,我也有严格的要求来控制我的所有包。我不希望 cmake 在旁边包含一些东西并调试正在发生的事情,我需要将其搜索路径限制为 CMAKE_MODULE_PATH
。
我发现的唯一显式方法是 NO_DEFAULT_PATH
in find_package
调用,但我不想一遍又一遍地重复这些论点。有没有变量可以帮我控制它?我找到了一组变量 CMAKE_FIND_USE_*_PATH
但没有关于它们的明确文档
当您需要修改命令的某些标准行为时,您可能会使用函数或宏来隐藏一些细节。在这种情况下,您需要一个可能如下所示的宏:
macro(find_package_restricted)
find_package(${ARGN} NO_DEFAULT_PATH)
endmacro()
你可以像使用它一样使用它 find_package
:
find_package_restricted(Boost REQUIRED)
CMake documentation描述了构造安装前缀的算法。通过遵循该算法,应该很容易收集所有 CMAKE_FIND_USE_*_PATH
变量,将其设置为 FALSE 将禁用相应的前缀:
- 在
<PackageName>_ROOT
CMake 和环境变量中指定的搜索路径可以通过设置 CMAKE_FIND_USE_PACKAGE_ROOT_PATH
变量来省略。
- 在 cmake-specific 缓存变量中指定的搜索路径可以通过设置
CMAKE_FIND_USE_CMAKE_PATH
变量来省略。
- 在 cmake-specific 环境变量中指定的搜索路径可以通过设置
CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH
变量来省略。
- 无法禁用 HINTS 选项指定的搜索路径。
- 搜索标准系统环境变量可以通过设置
CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH
变量来省略。
- 可以通过设置
CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY
变量省略存储在 CMake 用户包注册表中的搜索路径。
- 可以通过设置
CMAKE_FIND_USE_CMAKE_SYSTEM_PATH
变量来省略在当前系统的平台文件中定义的搜索 cmake 变量。
- 可以通过设置
CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY
变量来省略存储在 CMake 系统包注册表中的搜索路径。
- 无法禁用 PATHS 选项指定的搜索路径。
总计设置
set(CMAKE_FIND_USE_PACKAGE_ROOT_PATH FALSE)
set(CMAKE_FIND_USE_CMAKE_PATH FALSE)
set(CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH FALSE)
set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH FALSE)
set(CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY FALSE)
set(CMAKE_FIND_USE_CMAKE_SYSTEM_PATH FALSE)
set(CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY FALSE)
等同于每个 find_package
调用中的 NO_DEFAULT_PATH 选项。
我想模块化我的项目并使用 find_package
来控制 3rdparty 包含,我也有严格的要求来控制我的所有包。我不希望 cmake 在旁边包含一些东西并调试正在发生的事情,我需要将其搜索路径限制为 CMAKE_MODULE_PATH
。
我发现的唯一显式方法是 NO_DEFAULT_PATH
in find_package
调用,但我不想一遍又一遍地重复这些论点。有没有变量可以帮我控制它?我找到了一组变量 CMAKE_FIND_USE_*_PATH
但没有关于它们的明确文档
当您需要修改命令的某些标准行为时,您可能会使用函数或宏来隐藏一些细节。在这种情况下,您需要一个可能如下所示的宏:
macro(find_package_restricted)
find_package(${ARGN} NO_DEFAULT_PATH)
endmacro()
你可以像使用它一样使用它 find_package
:
find_package_restricted(Boost REQUIRED)
CMake documentation描述了构造安装前缀的算法。通过遵循该算法,应该很容易收集所有 CMAKE_FIND_USE_*_PATH
变量,将其设置为 FALSE 将禁用相应的前缀:
- 在
<PackageName>_ROOT
CMake 和环境变量中指定的搜索路径可以通过设置CMAKE_FIND_USE_PACKAGE_ROOT_PATH
变量来省略。 - 在 cmake-specific 缓存变量中指定的搜索路径可以通过设置
CMAKE_FIND_USE_CMAKE_PATH
变量来省略。 - 在 cmake-specific 环境变量中指定的搜索路径可以通过设置
CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH
变量来省略。 - 无法禁用 HINTS 选项指定的搜索路径。
- 搜索标准系统环境变量可以通过设置
CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH
变量来省略。 - 可以通过设置
CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY
变量省略存储在 CMake 用户包注册表中的搜索路径。 - 可以通过设置
CMAKE_FIND_USE_CMAKE_SYSTEM_PATH
变量来省略在当前系统的平台文件中定义的搜索 cmake 变量。 - 可以通过设置
CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY
变量来省略存储在 CMake 系统包注册表中的搜索路径。 - 无法禁用 PATHS 选项指定的搜索路径。
总计设置
set(CMAKE_FIND_USE_PACKAGE_ROOT_PATH FALSE)
set(CMAKE_FIND_USE_CMAKE_PATH FALSE)
set(CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH FALSE)
set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH FALSE)
set(CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY FALSE)
set(CMAKE_FIND_USE_CMAKE_SYSTEM_PATH FALSE)
set(CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY FALSE)
等同于每个 find_package
调用中的 NO_DEFAULT_PATH 选项。