【发布时间】:2021-03-28 15:24:58
【问题描述】:
我在 MPLAB X IDE v5.45 下使用 AVR GCC 编译器 v5.4.0。
我在avr-as-pre 部分为编译器定义了一个符号。它将以下内容添加到调用的命令中:
-DF_CPU=32000000UL
在代码中我有一些这样的检查:
#ifndef F_CPU
// do something
它实际上做一些事情。看起来好像没有找到符号。 我对如何以这种方式为整个项目定义符号是错误的吗?
更新
IDE 将这些东西称为“定义的符号”:
但它实际上将它们存储为“预处理器宏”:
<AVR-AS-PRE>
<property key="announce-version" value="false"/>
<property key="include-paths" value=""/>
<property key="preprocessor-macros" value="F_CPU=32000000UL"/>
<property key="preprocessor-macros-undefined" value=""/>
<property key="suppress-warnings" value="false"/>
</AVR-AS-PRE>
不幸的是,它似乎没有将它们传递给编译器:
$ grep -nrw . -e F_CPU
./nbproject/configurations.xml:117: <property key="preprocessor-macros" value="F_CPU=32000000UL"/>
【问题讨论】:
-
这是正确的语法,它在测试中运行良好:godbolt.org/z/dxoxMa3rc。所以可能
-D选项实际上并没有进入编译器;我不熟悉这个 IDE,所以我不确定你添加这个选项的位置是否正确。需要注意的是,您定义的不是 symbol (在链接时解析为地址的名称)而是 macro (仅用于预处理);是否有可能与混淆有关? -
@NateEldredge,我想你是对的。我已经更新了问题。
-
除非您的项目中确实有汇编语言文件,否则使用“avr-as-pre”部分是可疑的。 “avr-as”是 AVR 的 GNU 汇编器的名称。
-
@DavidGrayson,这是有道理的。我被
pre后缀出卖了——我猜它代表preprocessor,但我没想到as部分!
标签: gcc c-preprocessor avr mplab