如何使编译器版本特定于 ifdef?

问题描述

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

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

解决方法

就像 Deumaudit 在评论中所说:

尝试使用 __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