【问题标题】:Pass option to cmake for future option to crosscompilation (CROSS_COMPILE)将选项传递给 cmake,以便将来选择交叉编译 (CROSS_COMPILE)
【发布时间】:2012-05-19 23:10:20
【问题描述】:
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。我怎样才能做到?

【问题讨论】:

    标签: makefile cmake cross-compiling cmakelists-options


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      对于最简单的方法,这样做:

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

      【讨论】:

      • 谢谢,但这不是我想要的。还有一些错误:~/projects/buildroot/output/host/usr/bin/arm-linux-;g++: No such file or directory
      • 我想通过 CROSS_COMPILE 选项来制作(到 makefile)
      • 我编辑了答案。但是第一个选项可能仍然会给您一个链接器错误。 CMake 不应该使用生成器特定的东西,比如你正在尝试做的事情。不应通过 make 将编译器变量传递给 CMake 生成的 makefile。通过 CMake 生成 makefile 时,您应该定义交叉编译器。第二个选项现在应该可以工作了。
      • 这很可悲。但是感谢您提供此变体,我将尝试使用它。
      猜你喜欢
      • 2021-10-10
      • 2021-12-30
      • 2023-04-08
      • 2017-11-01
      • 2013-12-01
      • 2011-07-05
      • 2014-02-23
      相关资源
      最近更新 更多