【问题标题】:How can I make compiler version specific ifdef?如何使编译器版本特定于 ifdef?
【发布时间】:2021-09-27 16:39:09
【问题描述】:

我遇到的问题是我的程序将通过 cmake 激活 g++10.2 和 c++11 进行编译。但它不会与也有 c++11 的 arduino dues arm-none-eabi-g++.exe 编译器一起编译。失败是因为arm编译器需要添加一行,但是当我将该行添加到g++10.2时它不会编译。

所以我需要一个#ifdef 或其他替代方法来激活和停用编译器特定的行。

【问题讨论】:

  • 请参阅stackoverflow.com/questions/2224334/… 以查找适用于您的两个编译器的预定义宏。然后,您可以使用在两个编译器之间定义不同的一个。
  • 尝试使用__arm____aarch64____ARM_ARCH

标签: c++ c++11 g++ arduino-c++


【解决方案1】:

就像 Deumaudit 在 cmets 中所说:

尝试使用__arm____aarch64____ARM_ARCH

如果你使用#ifdef __arm__ 甚至#if defined(__arm__) || defined(__aarch64__),你可能会没事的

如果您计划向您的程序添加更多受支持的平台,那么在为特定平台构建时定义一些宏可能是个好主意。我在 CMakeLists.txt 中定义了自己的 _MY_APP_ARM 宏:

if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm")
    add_definitions(-D_MY_APP_ARM)
endif()

然后我可以将其用作#ifdef _MY_APP_ARM

【讨论】:

    猜你喜欢
    • 2018-02-13
    • 2010-10-18
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 2012-03-31
    相关资源
    最近更新 更多