如何分发FindXXX.cmake

如何分发FindXXX.cmake,cmake,Cmake,我有一个生成库的CMake项目。我已经编写了一个CMake脚本FindXXX.CMake,以帮助我的库的用户。通过这种方式,他们可以使用find_包(XXX)并获得所需的变量。到目前为止还不错 现在的问题是用户已经将这个FindXXX.cmake复制到了他们自己的项目中。如果我修改它,他们只会坚持前一个 有没有一种通用的方式来分发这样的脚本?我的安装程序是否应该将它放在某个特殊位置,以便CMake在用户不在其项目中复制的情况下找到它?尝试复制到。您可能需要系统管理员权限 另一个解决方案是在Win

我有一个生成库的CMake项目。我已经编写了一个CMake脚本FindXXX.CMake,以帮助我的库的用户。通过这种方式,他们可以使用find_包(XXX)并获得所需的变量。到目前为止还不错

现在的问题是用户已经将这个FindXXX.cmake复制到了他们自己的项目中。如果我修改它,他们只会坚持前一个

有没有一种通用的方式来分发这样的脚本?我的安装程序是否应该将它放在某个特殊位置,以便CMake在用户不在其项目中复制的情况下找到它?

尝试复制到。您可能需要系统管理员权限

另一个解决方案是在Windows上添加一些注册表项:
HKEY\U CURRENT\U USER\Software\Kitware\CMakeSetup\Settings\StartPath
。您应该将下一个
WhereBuild{i}
值添加到项目CMake文件中。这里的诀窍是CMake从以前使用的库中搜索已知库

根据:

您应该创建以下库并复制FindProjectName.cmake:
C:\Program Files\ProjectName\CMake在Windows上,/usr/local/ProjectName/share/CMake在Linux上。

实际上,当将FindXXX.CMake文件复制到${CMake_ROOT}/Modules上时,您的项目可以在其他几个位置放置一个“项目配置文件”,CMake将自动找到它,而无需FindXXX.CMake文件

根据,您可以将项目配置文件安装到您自己的安装树中,如果您的安装树位于“常规”位置之一,CMake将找到它


查找该页面上以“CMake为软件包构造一组可能的安装前缀”开头的文本,以查看有关可以在何处安装项目配置文件的详细信息,以便CMake自动找到该文件。

感谢您的回答。复制到${CMAKE_ROOT}/模块应该会奏效。不鼓励复制到${CMAKE_ROOT}/模块。如果卸载并重新安装CMake,您的文件将不再存在。有关另一种技术,请参阅我对该问题的另一个答案。在“配置”中搜索包时,CMake仅搜索您自己的安装树(
/share/
)模式。在此模式下,它不会查找
FindProjectName.cmake
,而是查找
ProjectNameConfig.cmake
。有点烦人,因为我花了一段时间才弄清楚为什么找不到我的文件:-)对。我更新了我的答案,使之更加清晰。我本来一直打算谈论“项目配置文件”,但无意中一直在谈论“FindXXX.cmake”模块,好像它们是等价的。它们不是:它们是获取相同信息的两个独立机制。一个是使用“在此处搜索”技术首先定位项目(查找模块),另一个是使用“在预期位置找到项目配置文件,只需加载它”技术(项目配置文件)。。。谢谢你的评论,这促使我纠正了一个长期存在的错误。