2011-04-26 77 views
1

我正在尝试创建一个库文件。 .cpp文件有一些条件编译行。该代码可以被发现在:从.h和.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.cppHMC58X3.h我确实有不同的代码进行编译,具体取决于是否已启用该标志。

条件编译似乎适用于HMC58X3.h,而它不适用于HMC58X3.cpp。它总是看起来好像ISHMC5843尚未定义。如何才能工作?

+0

有什么错误? – plinth 2011-04-26 19:25:01

+0

没有错误,它只是不工作..在.cpp文件中它总是编译#ifdef ISHMC5843的#else部分,而它在.h条件编译中正常工作。 – 2011-04-26 19:28:01

+0

当你自己编译HMC58X3.o时,会发生这种情况,而且没有其他的东西?你如何编译它? – Beta 2011-04-26 19:33:28

回答

4

A #define不像全局变量。这是一个预处理器宏,仅适用于该编译单元的其余文本。有几个方法可以做到你想要什么:

  1. 创建#define ISHMC5843一个config.h,并确保无处不在包括它(以及任何其他包括参考之前)。
  2. 在您的Makefile(您可能无法在Arduino中访问)确保-DISHMC5843出现在每个编译行,通常包括在CFLAGS中。 (如何确保CFLAGS是编译规则的一部分的细节超出了这个问题的范围)。
+0

打我吧.. – Oliver 2011-04-26 19:27:48

0

编译HMC58X3.cpp时,编译器没有看到HMC58X3_raw.pde中的宏定义。国际海事组织,你最好使用全局布尔常量变量来实现你在这里要做的事情。

0

我看不出ISHMC58431是如何在要么 HMC58X3.h或HMC58X3.cpp定义。

预处理器对文件进行预处理时,该定义必须可见。这通常由#include通过在所有需要了解宏的文件中包含#define的通用文件完成,或者通过在编译器命令行上定义宏(例如-DISHMC58431)(编译器相关)来完成。

这当然要求.pde文件也由预处理器处理,因为它有#include语句,我假定它是。