cmake:从脚本设置环境variables

我有一个脚本来设置交叉编译所需的所有variables。 这只是其中的一部分:

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 ,所有的环境variables都被导入到当前的shell会话中,我可以编译我的例子。

是否有可能在cmake中导入这些variables? 如果是的话,怎么样?


更多的细节:

  1. 我正在使用ELDK v5.4 ,它的安装脚本会生成一个脚本来设置所有的环境variables
  2. 我发现这个教程 ,它解释了如何手动设置交叉编译,而不是如何使用脚本,它设置的一切
  3. 如果我在设置cmake之前调用脚本,一切正常,我可以交叉编译,但我希望cmake调用脚本

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

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

否则,在cmake脚本中set命令可能是你想要的,参见参考手册 。 要设置环境变量 PATH,请执行以下操作:

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

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

 set(variable "value") 

不知道你必须设置哪些,可能是环境的。

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

设置一个编译器和标志与CMake进行可靠的交叉编译的唯一方法是使用一个工具链文件,就像在你找到的教程中所做的那样。

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

实际上cmake工具链文件不会经常改变。 通常用于目标的基本标志在项目中很早就已经确定。 使用CMake的CMAKE_BUILD_TYPE您可以在调试和发布编译之间进行切换,而无需更改工具链文件。

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

编辑 :你可以做的一件事是用-D参数调用cmake设置你想要的变量,并已经从你的脚本:

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

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