CMAKE 使用环境变量而不将它们作为命令行参数传递?

Posted

技术标签:

【中文标题】CMAKE 使用环境变量而不将它们作为命令行参数传递?【英文标题】:CMAKE use environment variables without passing them as commandline arguments? 【发布时间】:2013-07-23 18:15:36 【问题描述】:

我在 RHEL5 上使用模块,并在我的机器上安装了各种版本的编译器/binutils。因此,我最终定义了指向我的工具的环境变量并相应地更新了路径,因此 RHEL5 附带的旧工具不适用。

有没有简单的方法让cmake加载对应的环境变量?

例如在我的环境中:

CMAKE_CXX_COMPILER=/some/other/compiler
CMAKE_LINKER=/some/other/linker

有没有办法让 cmake 抓取这些而不通过命令行将它们作为参数传递?

以下内容在我的 CMakeLists.txt 中对我不起作用

SET(CMAKE_CXX_COMPILER, $ENVCMAKE_CXX_COMPILER)

毫不奇怪,以下内容也不起作用:

IF($ENVCMAKE_CXX_COMPILER)
    SET(CMAKE_CXX_COMPILER, $ENVCMAKE_CXX_COMPILER)
    MESSAGE("CMAKE_CXX_COMPILER $CMAKE_CXX_COMPILER")
ENDIF()

也许这是一个语法问题,或者不是更新此类 cmake 变量的正确位置? 当我通过命令行传递时它确实有效(例如 -DCMAKE_CXX_COMPILER=$CMAKE_CXX_COMPILER),但我不想那样做。

谢谢

【问题讨论】:

逗号不应该在那里(在任何一种情况下)。此外,编译器设置是 CMake 中的一种特殊野兽。你会发现$ENVXYZ 工作正常。 【参考方案1】:

没关系。 这是一个语法错误:SET(CMAKE_CXX_COMPILER, $ENVCMAKE_CXX_COMPILER) 不应该有逗号。正确的语法是:

SET(CMAKE_CXX_COMPILER $ENVCMAKE_CXX_COMPILER)

【讨论】:

以上是关于CMAKE 使用环境变量而不将它们作为命令行参数传递?的主要内容,如果未能解决你的问题,请参考以下文章

在shell脚本中将变量的值作为命令行参数传给程序

Snakemake:将命令行参数传递给脚本。

如何使用 CMake 获取命令行输出作为参数?

iOS如何显示具有资产库路径的图像而不将它们绑定到实例变量

如何访问对象而不将其作为参数传递?

将 SASS/SCSS 变量导出到 Javascript,而不将它们导出到 CSS