4
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。我怎样才能做到?

4

2 回答 2

10

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 环境变量、头文件和库位置等的所有定义。

于 2012-06-18T13:42:04.257 回答
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 生成正确的构建文件。

于 2012-05-12T03:46:28.930 回答