【发布时间】:2014-07-16 15:38:18
【问题描述】:
因此,如果我使用 cmake/cpack 制作包,则必须在 cmake 中设置一个变量,告诉它将 find_package 用于我的模块的 *.cmake 文件放在哪里...对吗?
那个变量是什么?
【问题讨论】:
标签: cmake
因此,如果我使用 cmake/cpack 制作包,则必须在 cmake 中设置一个变量,告诉它将 find_package 用于我的模块的 *.cmake 文件放在哪里...对吗?
那个变量是什么?
【问题讨论】:
标签: cmake
根据documentation of find_package,它要么是CMAKE_MODULE_PATH,但我不建议这样做,否则你可以将你的<name>-config.cmake文件放在任何地方,只要你在find_package调用中指定路径。
否则可能会设置系统范围的路径,即CMAKE_SYSTEM_PREFIX_PATH、CMAKE_SYSTEM_FRAMEWORK_PATH 和CMAKE_SYSTEM_APPBUNDLE_PATH。
来自文档(删除了不必要的信息):
find_package(<package> ...
[CONFIG]
...
[NAMES name1 [name2 ...]]
[CONFIGS config1 [config2 ...]]
[HINTS path1 [path2 ... ]]
[PATHS path1 [path2 ... ]]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
...)
它将在所有PATHS 和所有HINTS 中搜索<NAMES>-config.cmake(按此顺序),并预定义CMAKE 路径。
确切的搜索顺序(来自上面引用的文档):
在 cmake 特定缓存变量中指定的搜索路径。这些旨在通过 -DVAR=value 在命令行上使用。如果通过了 NO_CMAKE_PATH 可以跳过这个
在 cmake 特定环境变量中指定的搜索路径。这些旨在在用户的 shell 配置中设置。如果通过了 NO_CMAKE_ENVIRONMENT_PATH,则可以跳过此操作
由 HINTS 选项指定的搜索路径。这些应该是由系统自省计算的路径,例如由已找到的另一个项目的位置提供的提示。应该使用 PATHS 选项指定硬编码猜测。
搜索标准系统环境变量。如果通过了 NO_SYSTEM_ENVIRONMENT_PATH,则可以跳过此步骤。以 /bin 或 /sbin 结尾的路径条目会自动转换为其父目录
【讨论】:
find_package 调用中指定。通常路径是在配置过程中设置的,至少在我见过的大多数项目中是这样。
CMAKE_PREFIX_PATH 和 CMAKE_MODULE_PATH 都没有为您的 CMake 设置?
PATH 已设置,对吗?因为这也是 CMake 的默认搜索目录。