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

问题描述 投票:4回答:2
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的路径. 我如何才能做到这一点?

makefile cmake cross-compiling cmakelists-options
2个回答
9
投票

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
投票

最简单的方法是这样做的。

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

© www.soinside.com 2019 - 2024. All rights reserved.