Gcc 在代码中找不到编译器定义的符号

Gcc 在代码中找不到编译器定义的符号,gcc,c-preprocessor,avr,mplab,Gcc,C Preprocessor,Avr,Mplab,我正在MPLAB X IDE v5.45下使用AVR GCC编译器v5.4.0。 我在avr的pre部分为编译器定义了一个符号。它将以下内容添加到调用的命令中: -DF_CPU=32000000UL 在代码中,我有如下检查: #ifndef F_CPU // do something 它确实做了些什么。看起来如果找不到符号。 我这样定义整个项目的符号是不是错了 更新 IDE称这些东西为“定义的符号”: 但实际上,它将它们存储为“预处理器宏”: <AVR-AS-PRE>

我正在MPLAB X IDE v5.45下使用AVR GCC编译器v5.4.0。 我在
avr的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"/>
$grep-nrw-efu处理器
/nbproject/configurations.xml:117:

您必须在
avr gcc>预处理和消息>定义的符号下定义编译器符号
部分:


您必须在
avr gcc>预处理和消息>定义的符号下定义编译器符号
部分:


这是正确的语法,它在测试中运行良好:。因此,可能
-D
选项实际上并没有到达编译器;我不熟悉这个IDE,所以我不确定您添加这个选项的位置是否正确。需要注意的是,您定义的不是符号(链接时解析为地址的名称),而是宏(仅用于预处理);“有没有可能与困惑有关?”纳蒂尔德雷奇,我想你是对的。我已经更新了这个问题。除非您的项目中确实有汇编语言文件,否则使用“avr as pre”部分是可疑的。“avr as”是avr的GNU汇编程序的名称。@DavidGrayson,这很有道理。我被
pre
后缀出卖了-我猜它代表
preprocessor
,但我没有把
看作是
的一部分!这是正确的语法,它在测试中运行良好:。因此,可能
-D
选项实际上并没有到达编译器;我不熟悉这个IDE,所以我不确定您添加这个选项的位置是否正确。需要注意的是,您定义的不是符号(链接时解析为地址的名称),而是宏(仅用于预处理);“有没有可能与困惑有关?”纳蒂尔德雷奇,我想你是对的。我已经更新了这个问题。除非您的项目中确实有汇编语言文件,否则使用“avr as pre”部分是可疑的。“avr as”是avr的GNU汇编程序的名称。@DavidGrayson,这很有道理。我被
pre
后缀出卖了-我猜它代表
preprocessor
,但我没有把
看作是
的一部分!