CMake:当环境变量发生变化时触发Makefile的重生

时间:2016-09-22 03:18:40

标签: makefile cmake

我正在使用Linux,CMake和Conda,它是一个包管理器,可以编辑$PATH作为在“环境”之间切换的方式。这意味着当我在Conda中运行特殊命令时,$PATH指向不同的编译器。 $CONDA_PREFIX也已更改。

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

如何使用CMake以简单的方式完成此操作?

2 个答案:

答案 0 :(得分:2)

今天我最终不需要变通方法代码,但这是一个主意。这不是一般性的-它要求您明确指定构建所依赖的变量。

  • 创建一个CMake包装器脚本,该脚本接收影响我特定构建的环境变量的名称。
  • echo将它们全部以VARIABLE=value格式放入${CMAKE_CURRENT_BINARY_DIR}/buildvars.environment文件中。仅当文件不存在或文件内容不同时才这样做。
  • 调用cmake时,如果文件比内部配置新,请添加cmake -DCMAKE_CONFIGURE_DEPENDS=<build_direcotry>/buildvars.environment来触发重新配置。

参考文献:

相关问题:How to trigger a CMake reconfigure when the output of a command changes

答案 1 :(得分:-1)

简而言之,生成的构建目录不应再依赖于环境。

  

如果用户意外地出现错误(不匹配)的Conda环境与CMake构建树,则构建可能有缺陷。

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