2016-09-22 79 views
0

我正在使用Linux,CMake和Conda,它是一个包管理器,它编辑$PATH作为在“环境”之间切换的一种方式。这意味着当我在Conda中运行一个特殊命令时,$PATH指向一个不同的编译器。 $CONDA_PREFIX也改变了。CMake:当环境变量发生变化时触发Makefiles的再生

默认情况下,CMake对这些更改不敏感。我希望它是。具体来说,我希望CMake在$PATH中找到不同的GCC时自动重新生成所有Makefile,或者自上次显式cmake调用以来$CONDA_PREFIX已更改。这种再生将类似于当您编辑顶级CMakeLists.txt文件时CMake所做的事情 - 下次运行make时,它会重新生成所有内容。

如何使用CMake以简单的方式执行此操作?

+0

自然的方法似乎为每个额外的“环境”创建新的构建树。 – Tsyvarev

+0

@Tsyvarev:我明白你的意思,但这并不能解决问题 - 如果用户意外地在错误的(不匹配的)Conda环境与CMake构建树中,构建可能有缺陷。我试图确保构建永远不匹配。 –

+0

您可以添加目标(通过'add_custom_target'),它会检查构建树是否与当前环境相对应。对于不匹配的构建,目标可能会因适当的消息而失败。如果您需要*部分重新配置,则强制CMake重新运行(请参阅,例如[该邮件](http://public.kitware.com/pipermail/cmake/2010-November/040777.html))可能会有用。但是,当编译器发生变化时,您可能需要放弃所有与编译器相关的缓存,这实际上是一个干净的配置(干净的构建目录中的'cmake'调用)。 – Tsyvarev

回答

0

总之,生成的构建目录不应该依赖于环境。

如果用户不小心在错误(不匹配)的Conda环境与CMake构建树中,构建可能有缺陷。

如果您使用find_program()命令来确定您正在使用的所有工具的路径,那么这绝不会发生。为每个工具使用完整路径并为每个环境设置使用构建目录是处理此问题的首选方法。

相关问题