【问题标题】:Predefined macro to distinguish arm-none-eabi-gcc from gcc用于区分 arm-none-eabi-gcc 和 gcc 的预定义宏
【发布时间】:2017-04-07 21:07:26
【问题描述】:

我正在构建自己的库,它应该可以在 arm mbed 和 linux 平台上工作。如果目标是 ARM mbed,则库需要使用arm-none-eabi-gcc 进行交叉编译,而如果目标平台是 linux,则需要使用 gcc 编译库。是否有预定义的编译器宏可以让我确定调用哪个编译器来编译库?请注意,树莓派 有一个 ARM CPU 也需要支持,所以我不能使用任何拱宏。

【问题讨论】:

  • 我已经尝试过这个帖子中的建议,但是有很多宏,需要很长时间才能一一浏览。
  • 尝试使用diff比较两个编译器生成的列表。或看这里:gcc.gnu.org/onlinedocs/cpp/…
  • 已经尝试过diff:输出的长度是原来的两倍......但是该链接帮助我找到了可能的答案。似乎__unix__ 可以工作。谢谢!
  • 我认为你这样做是为了低音。您应该有一个简单的configure 脚本(在make 之前运行)来选择目标架构;或者有一个具有不同目标的 Makefile(所以make mbed 编译 ARM mbed 版本,make linux 一个通用 Linux 版本,make pi 用于 Raspberry Pi,等等);与那些定义了一些预处理器宏的人一起,如果存在代码级差异,您的代码可以使用。

标签: c linux gcc macros arm


【解决方案1】:

根据 cmets 和此链接的建议:https://gcc.gnu.org/onlinedocs/cpp/System-specific-Predefined-Macros.html#System-specific-Predefined-Macros,宏 __unix__ 将由 gcc 定义,而不是由 arm-none-eabi-gcc 定义。如果有人有更好的答案,请发布。

【讨论】:

    【解决方案2】:

    根据ARM Compiler Toolchain Reference,宏__arm__始终是为ARM编译器arm-none-eabi-gcc定义的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      相关资源
      最近更新 更多