我有一个脚本,用于设置交叉编译所需的所有变量。这只是其中的一部分:
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中导入这些变量?如果是,怎么样?
更多细节:
答案 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
结果与使用工具链文件相同。