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

时间:2014-01-10 14:55:39

标签: 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

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

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


更多细节:

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

2 个答案:

答案 0 :(得分:65)

通过cmake quick start读取,您可以在命令行上指定变量:

cmake -DVARIABLE1=value1 -DVARIABLE2=value2 ...

否则,cmake脚本中的set命令可能就是您想要的,请参阅reference manual。要设置环境变量 PATH,请执行以下操作:

set(ENV{PATH} "/home/martink")

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

set(variable "value")

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

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

答案 1 :(得分:4)

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

当我们遇到同样的问题(一个生成脚本的工具包,所以设置编译环境)时,我们改变了工具包,它产生了一个工具链文件和脚本。

实际上,cmake-toolchain文件并不经常改变。用于目标的基本标志在项目中很早就得到了修复 - 通常。使用CMake的CMAKE_BUILD_TYPE,您可以在不更改工具链文件的情况下在Debug和Release编译之间切换。

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

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

source environment-setup-powerpc-linux
cmake -DCMAKE_C_COMPILER=$CC -DCMAKE_CXX_COMPILER=$CXX etc

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