问题描述
我遇到的问题是我的程序将使用通过 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