2012-06-12 80 views
8

当我将#define添加到main.cpp或从main.cpp调用的一个头文件中时,它似乎没有在其他文件中定义。Android NDK #define问题

例如,在main.cpp中我可能会做这样的事情:

#define TEST_FOO 1 

然后在我的其他文件中的一个,例如secondfile.cpp,TEST_FOO时就好像是从来没有定义忽略:

#if TEST_FOO 
// do something <- this never gets reached 
#endif 

即使在Android.mk文件,我把secondfile.cpp main.cpp中后:

LOCAL_SRC_FILES := main.cpp \ 
        secondfile.cpp 

有没有办法在实际代码中#define Android NDK中的值?

回答

16

这是正确的。编译器一次只知道一个源文件。当您编译secondfile.cpp时,它完全忘记了您在main.cpp中可能定义的任何内容。

如果您希望#define在您的所有源文件中都可见,则需要将其放入所有文件包含的标题中。或者,通过命令行传递它;您可以通过添加这样的事情你Android.mk做到这一点:

LOCAL_CPPFLAGS := -DTEST_FOO=1 
+1

在Application.mk中使用多个库'APP_CPPFLAGS + = -DTEST_FOO = 1'也能正常工作。 – MD1948

0

把它放在头文件,包括在你希望它被定义的每个.c文件的头文件。