【发布时间】:2020-11-25 15:49:01
【问题描述】:
将编译器的 -D 标志硬编码到源文件中的最佳方法是什么?
我想将#define 放在一个 的标题中,然后导入一堆应该对该定义做出反应的东西。它是这样工作的吗?我应该放哪个标题?还是直接到main.c?还是对他们所有人?
TMI-details:这里的环境是 digispark hw-018(带有内置 USB 编程器的 attiny85),#define 应该替换 -DUSE_SOFTWARE_SPI,这样我就可以在 SPI 模式下使用 AVR-CAN 库从 MCP2515 读取内容。
编辑:在一些恼人的头撞到墙上之后,main.c 的顶部现在看起来像这样,但它仍然无法工作。
#define USE_SOFTWARE_SPI
#include "src/can.h"
#define USE_SOFTWARE_SPI
#include <avr/io.h>
#define USE_SOFTWARE_SPI
#include <avr/pgmspace.h>
#define USE_SOFTWARE_SPI
#include <DigiUSB.h>
我说得对,有些东西在某处覆盖了我的定义?如果我在#ifndef(或#ifdef)之前硬编码#define USE_SOFTWARE_SPI,它就可以工作
【问题讨论】:
-
为什么不把它放在你的
main.c源文件的最顶部,紧跟在#includes之后呢?这将使所有读者都清楚发生了什么。 -
请参阅下面 Steve Friedl 的出色回复(如果您觉得有帮助,请“点赞”和“接受”)在项目级别配置 #define(例如“makefile”或 .csproj)是“理想的”。一个单独的 .h 文件 - 其中 #includes ALL 使用该 #define 的标头 - 是一个合理的替代方案。将您的#define 放在 .c 的顶部是最简单的。如果这是一个“一次性”项目,如果您只有一个源文件,并且它适用于您 - 去吧:)
-
Arduino 与任何其他平台没有什么不同。学习正确的方法并应用它。关于如何正确做头文件的教程数不胜数。
-
由于某种原因,我无法让它工作......将定义放在 main.c 中不起作用。我必须把它放在#ifndef 或#ifdef 所在的同一个文件中......我认为有人已经将它硬编码在某个很深的地方......
-
请不要在问题中编辑解决方案。请自己创建一个答案或接受现有答案之一。
标签: c arduino compilation header-files pre-compilation