47

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

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. 我找到了这个教程,它解释了如何手动设置交叉编译,而不是如何使用设置所有内容的脚本
  3. 如果我在设置 cmake 之前调用脚本,一切正常,我可以交叉编译,但我希望 cmake 调用脚本
4

2 回答 2

88

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

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

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

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

要设置普通变量,请执行以下操作:

set(variable "value")

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

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

于 2014-01-18T09:05:12.437 回答
5

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

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

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

如果您有不同的目标需要支持,请创建不同的工具链并将 out-of-source-build 与 CMake 一起使用。

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

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

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

于 2014-01-12T11:37:44.843 回答