将选项传递给cmake以便将来选择交叉编译(CROSS_COMPILE)

时间:2012-05-11 10:48:50

标签: makefile cmake cross-compiling

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。我该怎么做?

2 个答案:

答案 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生成正确的构建文件。