IF(UNIX)
# CROSS COMPILATION! ON/OFF
#SET(CMAKE_C_COMPILER /home/username/projects/buildroot/output/host/usr/bin/arm-linux-gcc)
#SET(CMAKE_CXX_COMPILER /home/username/projects/buildroot/output/host/usr/bin/arm-linux-g++)
#SET(CMAKE_C_COMPILER /home/username/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-eabi-gcc)
#SET(CMAKE_CXX_COMPILER /home/username/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-eabi-g++)
这是我现在做的交叉编译。我想添加一个选项来运行它,如果我不把CROSS_COMPILE作为make(不是cmake)的路径,它必须使用系统默认值,所以cmake必须把这个选项作为路径。
make CROSS_COMPILE=~/projects/buildroot/output/host/usr/bin/arm-linux-
如果我不把CROSS_COMPILE作为make的路径(而不是cmake), 它必须使用系统默认值, 所以cmake必须把这个选项作为makefile的路径. 我如何才能做到这一点?
Buildroot 会为你生成一个 CMake 工具链文件。根据你的Buildroot,它可能会直接放在 output
目录,或在 output/host/usr/share/buildroot
. 该文件名为 toolchainfile.cmake
. 然后构建你的CMake应用程序,做。
cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/buildroot/output/host/usr/share/buildroot/toolchainfile.cmake
这个文件包含了所有交叉编译器路径的定义, pkg -config环境变量, 头文件和库的位置等等.
最简单的方法是这样做的。
SET(CMAKE_C_COMPILER $(CROSS_COMPILE)gcc)
SET(CMAKE_CXX_COMPILER $(CROSS_COMPILE)g++)
当CROSS_COMPILE变量被传递给make时 它将会被交叉编译器路径所替代。
现在,正确的方法。理想情况下,CROSS_COMPILE变量应该在CMake运行时定义,因为它的目的是跨平台的。如果使用其他CMake生成器,使用第一种解决方案可能会破坏。
可以这样做。
IF(UNIX)
SET(CMAKE_C_COMPILER ${CROSS_COMPILE}gcc)
SET(CMAKE_CXX_COMPILER ${CROSS_COMPILE}g++)
然后定义变量
cmake -G "Unix Makefiles" -DCROSS_COMPILE=~/projects/buildroot/output/host/usr/bin/arm-linux-
在这种情况下,CMake会根据是否定义了CROSS_COMPILE来生成正确的构建文件。