【发布时间】:2017-05-16 23:53:02
【问题描述】:
我最近使用 CMake 构建了很多项目,总的来说,我认为它很棒。然而,每当我需要构建一个具有依赖关系的项目时,它很快就会变得很痛苦。
系统安装的依赖关系很好,因为 CMake 的 find_package 系统通常非常适合查找系统安装的包。但是,每当我从源代码构建依赖项时,我发现几乎不可能告诉 CMake 在哪里可以找到这些包。
我一直在搜索FindFoo.cmake 模块,找出它正在查看的特殊提示变量,然后将该变量设置为我的库所在的位置。真正的问题是,因为这些提示变量始终是 CMake 变量,我最终不得不将它们设置在我自己的 CMakeLists.txt 中,这真的很脏,或者将 cmake 包装在脚本文件中以确保它传递了所有正确的提示它需要查找包的变量。
我只会设置环境变量,但大多数FindFoo.cmake 模块实际上并不检查任何环境变量。
我曾考虑使用Package Registry 来帮助解决我的问题,但如果CMake 找到FindFoo.cmake 模块,它甚至不会费心在注册表中查找,并且当FindFoo.cmake 模块失败时CMake 就会放弃.
我正在寻找的是在 CMake 中的“用户范围”或“系统范围”设置变量的某种方法,因此我可以在一个地方指定我的提示变量,而不是跨一堆项目和脚本文件。不幸的是,我似乎无法找到任何此类功能。
我在 Windows 上,但我正在寻找尽可能通用的解决方案,因为我将来可能不会。
【问题讨论】:
-
您可以定义一个环境变量 FOO 包含您要使用的所有路径,并通过
-DCMAKE_PREFIX_PATH=$FOO将此变量传递给 CMake。 -
@usr1234567 我在寻找解决方案时不知何故错过了 CMAKE_PREFIX_PATH 变量。我不知道它是否正是我想要的,但它似乎很有用。
标签: cmake