cmake:从脚本中设置环境变量

BЈо*_*вић 35 linux cmake environment-variables cross-compiling build-system

我有一个脚本,设置交叉编译所需的所有变量.这只是其中的一部分:

export CONFIG_SITE=~/workspace/eldk-5.4/powerpc/site-config-powerpc-linux
export CC="powerpc-linux-gcc  -m32 -mhard-float --sysroot=~/workspace/eldk-5.4/powerpc/sysroots/powerpc-linux"
export CXX="powerpc-linux-g++  -m32 -mhard-float --sysroot=~/workspace/eldk-5.4/powerpc/sysroots/powerpc-linux"
export CPP="powerpc-linux-gcc -E  -m32 -mhard-float --sysroot=~/workspace/eldk-5.4/powerpc/sysroots/powerpc-linux"
export AS="powerpc-linux-as "
export LD="powerpc-linux-ld  --sysroot=~/workspace/eldk-5.4/powerpc/sysroots/powerpc-linux"
export GDB=powerpc-linux-gdb
Run Code Online (Sandbox Code Playgroud)

如果我这样做source environment-setup-powerpc-linux,所有环境变量都会导入到当前的shell会话中,我可以编译我的示例.

是否可以在cmake中导入这些变量?如果有,怎么样?


更多细节:

  1. 我正在使用ELDK v 5.4,它的安装脚本生成一个脚本,用于设置所有环境变量
  2. 我找到了这个教程,它解释了如何手动设置交叉编译,而不是如何使用脚本,它设置了所有内容
  3. 如果我在设置cmake之前调用脚本,一切正常,我可以交叉编译,但我希望cmake调用脚本

TMS*_*TMS 69

通过cmake快速入门阅读,您可以在命令行上指定变量:

cmake -DVARIABLE1=value1 -DVARIABLE2=value2 ...
Run Code Online (Sandbox Code Playgroud)

否则,setcmake脚本中的命令可能就是您想要的,请参阅参考手册.要设置环境变量 PATH,请执行以下操作:

set(ENV{PATH} "/home/martink")
Run Code Online (Sandbox Code Playgroud)

要设置正常变量,请执行:

set(variable "value")
Run Code Online (Sandbox Code Playgroud)

不确定你必须设置哪些,可能是环境设置.

也就是说,在调用cmake之前设置环境变量通常是解决问题的最简单的解决方案,如下例所示:https://stackoverflow.com/a/15053460/684229

  • 设置(ENV {PATH}"/ home/martink")对任何人都有效吗?它不在我的工作 (5认同)
  • @PriteshAcharya有一个拼写错误,类型集($ ENV {PATH}"/ home/martink") (4认同)
  • @JeanDavy我不认为这是一个拼写错误 - 集合($ ENV {PATH}"/ home/martink")会将PATH的当前值放在你指定的$ ENV {PATH}作为变量名称的位置,所以它赢得了'设置你认为你正在设置的内容.我只是偶然做到了这一点!将设置更常用的路径设置(ENV {PATH}"/ home/martink:$ ENV {PATH}"),这就是"$"所必需的位置. (2认同)

Pat*_* B. 7

设置编译器和标志以使用 CMake 可靠地进行交叉编译的唯一方法是使用工具链文件,如您在教程中找到的那样。

当我们遇到同样的问题时(一个生成脚本的工具包,因此设置编译环境),我们更改了工具包,使其与脚本一起生成工具链文件。

实际上,cmake-toolchain-file 不会经常更改。通常,用于目标的基本标志在项目的早期就已修复。使用 CMake,CMAKE_BUILD_TYPE您可以在调试和发布编译之间切换,而无需更改工具链文件。

如果您要支持不同的目标,请创建不同的工具链并使用 CMake 的源外构建。

编辑:您可以做的一件事是使用 -D 参数调用 cmake,设置您想要的变量并之前获取脚本:

source environment-setup-powerpc-linux
cmake -DCMAKE_C_COMPILER=$CC -DCMAKE_CXX_COMPILER=$CXX etc
Run Code Online (Sandbox Code Playgroud)

结果将与使用工具链文件相同。