如果gcc
不接受-mmcu
,您可能没有使用支持 AVR 架构的 gcc。
它通常是这样使用的:
avr-gcc -mmcu=atmega328p
因为它不仅是预处理器,实际上还有其他需要此设置的工具(链接器、汇编器)。
通常gcc
编译的体系结构由前缀表示,在这种情况下它是avr-
按照惯例。
所以解决方案是获得一个支持 AVR 的工具链。您可以从 Atmel 的网站下载它,甚至适用于 Linux。
更新
如果你想检查你的配置gcc
,你可以使用-dumpmachine
检查目标处理器
$ gcc -dumpmachine
i486-linux-gnu
$ arm-none-eabi-gcc -dumpmachine
arm-none-eabi
$ avr-gcc -dumpmachine
avr
如果您使用查看目标特定选项--target-help
$ gcc --target-帮助 | grep march
-march= 为给定的 CPU 生成代码
你可以看到 Linuxgcc
也接受-march
了。以后可能会失败。
gcc
是一个非常复杂的软件,因为它只支持这么多不同的架构。从这个角度来看,它的效果非常好。
另一个有趣的选择是-v
$ gcc -v
使用内置规范。
目标:i486-linux-gnu
配置:../src/configure -v --with-pkgversion='Debian 4.4.5-8'
[...]
看看它gcc
是如何建造的。
正如您在此处看到的那样,可能还会有另一个陷阱(多库)