2012-06-12 31 views
8

Khi tôi thêm #define vào main.cpp hoặc một trong các tiêu đề của tôi được gọi từ main.cpp, nó dường như không được định nghĩa trong các tệp khác.Android NDK #define Problems

Ví dụ, trong main.cpp tôi có thể làm điều gì đó như:

#define TEST_FOO 1 

Sau đó, trong một trong các file khác của tôi, ví dụ secondfile.cpp, TEST_FOO bị lờ đi như thể nó không bao giờ được định nghĩa:

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

Thậm chí nếu trong file Android.mk tôi đặt secondfile.cpp sau main.cpp:

LOCAL_SRC_FILES := main.cpp \ 
        secondfile.cpp 

Có cách nào để xác định giá trị trong NDK của Android bên trong mã thực tế không?

Trả lời

16

Điều đó là chính xác. Trình biên dịch chỉ biết về một tệp nguồn tại một thời điểm. Khi bạn biên dịch secondfile.cpp, nó đã hoàn toàn bị lãng quên về bất kỳ điều gì bạn có thể đã xác định trong main.cpp.

Nếu bạn muốn #define hiển thị trong tất cả các tệp nguồn của mình, bạn cần đặt nó vào tiêu đề được bao gồm bởi tất cả các tệp của bạn. Hoặc, vượt qua nó trên dòng lệnh; bạn có thể làm điều này bằng cách thêm một cái gì đó như thế này để Android.mk của bạn:

LOCAL_CPPFLAGS := -DTEST_FOO=1 
+1

Sử dụng nhiều thư viện 'APP_CPPFLAGS + = -DTEST_FOO = 1' trong Application.mk hoạt động tốt. – MD1948

0

Đặt nó trong file header và bao gồm các tập tin tiêu đề trong mỗi tập tin .c nơi bạn muốn nó được xác định.