我有一个脚本,可以设置交叉编译所需的所有变量。这只是其中的一部分:
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中导入这些变量?如果是,如何?
更多详细信息:
- 我使用的是ELDK v5.4,它的安装脚本生成了一个设置所有环境变量的脚本
- 我找到了这个教程,它解释了如何手动设置交叉编译,但没有解释如何使用脚本,因为脚本设置了所有内容
- 如果我在设置cmake之前调用脚本,一切都很好,我可以交叉编译,但我希望cmake调用脚本
阅读cmake快速启动,您可以在命令行上指定变量:
cmake -DVARIABLE1=value1 -DVARIABLE2=value2 ...
否则,cmake脚本中的set
命令可能就是您想要的,请参阅参考手册。要设置环境变量路径,请执行:
set(ENV{PATH} "/home/martink")
要设置正常变量,请执行:
set(variable "value")
不确定你必须设置哪些,可能是环境因素。
也就是说,在调用cmake之前设置环境变量通常是解决问题的最简单解决方案。如果您想要一种不依赖于特定shell的语法来设置环境变量的跨平台方法,可以使用cmake -E env
命令。
设置编译器和标志以可靠地使用CMake进行交叉编译的唯一方法是使用您在教程中找到的工具链文件。
当我们遇到与您相同的问题(一个生成脚本的工具包,因此设置编译环境)时,我们更改了工具包,使其在生成脚本的同时生成工具链文件。
事实上,cmake工具链文件不会经常更改。用于目标的基本标志通常在项目的早期就已修复。使用CMake的CMAKE_BUILD_TYPE
,您可以在调试和发布编译之间切换,而无需更改工具链文件。
如果要支持不同的目标,请创建不同的工具链,并使用CMake进行源代码外构建。
EDIT:您可以做的一件事是用-D参数调用cmake,设置您想要的变量,并在以下时间之前获取脚本:
source environment-setup-powerpc-linux
cmake -DCMAKE_C_COMPILER=$CC -DCMAKE_CXX_COMPILER=$CXX etc
结果将与使用工具链文件相同。