我正在尝试创建一个库文件。 .cpp文件有一些条件编译行。代码可以在以下网址找到:
HMC58X3.h http://sprunge.us/hEYW
HMC58X3.cpp http://sprunge.us/faRN
HMC58X3_raw.pde http://sprunge.us/BFVj
基本上,在Arduino草图文件HMC58X3_raw.pde
中我定义了ISHMC5843,在HMC58X3.cpp
和HMC58X3.h
中,我确实有不同的代码要编译,具体取决于该标志是否已启用。
条件编译似乎适用于HMC58X3.h
,而不适用于HMC58X3.cpp
。它总是看起来好像没有定义ISHMC5843。如何才能工作?
答案 0 :(得分:4)
#define
不像全局变量。它是一个预处理器宏,仅适用于该编译单元的剩余文本。有几种方法可以做你想做的事:
config.h
创建#define ISHMC5843
,并确保将其包含在任何地方(并且在其他任何包含引用它之前)。Makefile
中(在Arduino中可能无法访问),确保-DISHMC5843
出现在每个编译行上,通常将其包含在CFLAGS
中。 (有关如何确保CFLAGS
是编译规则的一部分的详细信息超出了本问题的范围。)答案 1 :(得分:0)
编译HMC58X3.cpp时,编译器未在HMC58X3_raw.pde中看到宏定义。 IMO,你最好使用一个全局布尔常量变量来实现你想要做的事情。
答案 2 :(得分:0)
我无法看到 HMC58X3.h或HMC58X3.cpp中如何定义ISHMC58431
。
在预处理文件时,预处理器必须能够看到定义。这通常通过#include
在需要可见性的所有文件中包含#define
的公共文件,或通过在编译器命令行上定义宏来完成,例如{{1}例如(编译器相关)。
这当然要求.pde文件也由预处理器处理,因为它具有-DISHMC58431
语句,我认为它是。