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++)
这是我现在为交叉编译所做的事情。我想添加选项来运行它:
make CROSS_COMPILE=~/projects/buildroot/output/host/usr/bin/arm-linux-
如果我没有路径CROSS_COMPILE来制作(而不是cmake)它必须使用系统默认值,所以cmake必须将此选项路径为makefile。我该怎么做?
答案 0 :(得分:8)
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环境变量,标头和库位置等的所有定义。
答案 1 :(得分:1)
对于最简单的方法,请执行以下操作:
SET(CMAKE_C_COMPILER $(CROSS_COMPILE)gcc)
SET(CMAKE_CXX_COMPILER $(CROSS_COMPILE)g++)
当CROSS_COMPILE变量传递给make时,它将被交叉编译器路径替换。
现在,正确的方法。理想情况下,应该在运行CMake时定义CROSS_COMPILE变量,因为它意味着跨平台。如果使用其他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生成正确的构建文件。