如果这个问题已在其他地方得到解答,请原谅我,但我不确定要搜索什么。
我从批处理文件传递一个值,虽然是一个makefile,但是传递给头文件,如下所示:
(使用AVR-GCC 4.5.2)
批次:
make ADDR=FOO
生成文件:
CFLAGS += -DADDR=$(ADDR)
...
gcc $(CFLAGS) main.c
这是头文件 main.h ,包含在main.c中;它应该在编译时根据ADDR的值选择特定的引脚排列:
#include "defs.h"
#if ADDR == FOO
... // Select pinout 1
#elif ADDR == BAR
... // Select pinout 2
#endif
比较值FOO和BAR是main.h包含的全局头文件 defs.h 中定义的常量:
#define FOO 23
#define BAR 42
现在问题:比较不起作用,ADDR不断读取为0.这似乎是因为预处理器在比较之前没有解析ADDR,即将FOO扩展到23.告诉编译器执行此扩展将是有帮助的。
当然,如果我直接在批处理文件中传递ADDR = 23,它就有效,但为了灵活性,我想使用defs.h中的别名而不是固定的数字常量。
顺便说一句,如果放在main.c中,以下工作:
int addr_val = ADDR; // is now 23
也许有一个我现在不知道的简单解决方案。请随时贡献。
祝你有愉快的一天!