将编译器的-D标志硬编码到源文件中的最佳方法是什么?
我想把#define放在一个的头中,然后导入一堆应该对该define做出反应的东西。它是那样工作的吗?我应该放哪个标题?或者直接到main.c?还是对他们所有人?
TMI详细信息:这里的环境是digispark hw-018(带内置usb编程器的attin85(,#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
源文件,那么把它放在文件的顶部就可以了:
// main.c
#define USE_SOFTWARE_SPI // must be first!
#include <spi_stuff.h>
...
如果需要在多个源文件中,这就不能很好地扩展,因为在几个地方中的一个地方很容易错过它。
我想,即使有多个源文件,但只有一个真正引用了需要影响的头文件,风险也较小,但这就是错误发生的原因。
我倾向于将这种东西作为一个整体放在项目定义中,无论是在makefile
中,还是在IDE用来驱动项目的任何东西中,因为这确保了每个人都能看到它
因此,如果你确实有多个源文件,并且你不能或不会将其放在项目文件中,那么处理它的方法是使用你自己的自定义标头,该标头仅用于此目的:
// my_spi_stuff.h
#define USE_SOFTWARE_SPI
#include <spi_stuff.h>
... others if needed
然后将包含在.c
程序中。一定要给文件起一个强烈建议";局部调整";而不是可能与图书馆提供的内容相混淆的内容。
EDIT我刚刚重读了这是Arduino,据我所知,IDE没有项目范围的设置。