Gcc 在代码中找不到编译器定义的符号
我正在MPLAB X IDE v5.45下使用AVR GCC编译器v5.4.0。 我在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>
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
,但我没有把看作是的一部分!