2010-10-26 30 views
15

Tôi cần một số MACRO tùy chỉnh trong các dự án NDK của tôi tuy nhiên tôi không có lý tưởng làm cách nào để thêm và tôi không tìm thấy câu trả lời Có thể ai đó vui lòng giúp đỡ không? Rất cám ơn!Cách thêm MACRO tùy chỉnh khi sử dụng NDK?

Trả lời

1

Nếu bạn hiểu chính xác, bạn cần xem cách hoạt động của C Preprocessor.

Bạn có kinh nghiệm bằng văn bản về C/C++ - chương trình không? Trước hết, bạn nên thực sự cầu kỳ về những phần nào của ứng dụng bạn viết trong mã gốc. Ngoài ra, bạn cần lưu ý rằng mã gốc sẽ hoạt động hoàn toàn khác khi nói đến phân bổ bộ nhớ và như vậy, vì vậy đây thực sự không phải là nơi để phỏng đoán.

Dành thời gian tìm hiểu C/C++, thiết kế ứng dụng của bạn một cách khôn ngoan để các phần bạn muốn viết bằng mã gốc được xác định rõ ràng và không làm tăng khả năng ứng dụng của bạn gặp sự cố. Tôi đoán hầu hết các dự án có thể làm mà không có phần ứng dụng gốc, vì vậy nếu bạn đang sử dụng nó và không biết chính xác những gì bạn đang làm, bạn nên thực sự xác định lại đó là điều đúng hay không không phải.

+0

Tôi đang di chuyển và tôi là người mới cho android , cảm ơn vì lời khuyên của bạn! – Loc

+0

Đồng ý. Tôi muốn thêm rằng _if_ ai đó quyết định trộn Java và mã gốc cho một ứng dụng Android, cố gắng giảm thiểu việc vượt qua ranh giới JNI. Đó là: giảm thiểu các cuộc gọi JNI vì chúng tương đối đắt tiền. Imho, bất cứ ai tìm thấy chính mình trong một tình huống mà các cuộc gọi JNI tần số cao không thể tránh được nên nghiêm túc xem xét đi Java chỉ. Nếu không vì lý do hiệu suất, thì ít nhất là để ngăn chặn JNI gây đau đầu. – pauluss86

44

Nếu bạn muốn thêm một định nghĩa đặc biệt khi biên dịch mã NDK của bạn (JNI) thêm đoạn mã sau vào Android.mk của bạn:

LOCAL_CFLAGS := -DMYDEFINE 

này sẽ xác định các Macro MYDEFINE trong c của bạn/C++ mã.Dưới đây là một ví dụ

#ifdef MYDEFINE 
// We build the project with this special macro 
#else 
// We build without setting the macro in the LOCAL_CFLAGS 
#endif 
+0

Nó hoạt động hoàn hảo! – Loc

+5

Rất vui khi nó hoạt động: P Vì vậy, bạn có thể chấp nhận câu trả lời hehe: P – Moss

+2

Tìm hiểu từ lỗi của tôi: đừng bỏ lỡ 'D' trong' -DMYDEFINE' – codingFriend1

1

Nếu bạn đang nói về macro makefile android như

$ (gọi my-dir)

Đó là chính xác giống như cú pháp makefile GNU

Gnu makefile manual

Ví dụ:

ngược = $ (2) $ (1)

foo = $ (gọi ngược lại, a, b)

$ (cảnh báo $ (foo))

kết quả :

ba

1

Để xác định marcro:

LOCAL_CFLAGS += -DYOUR_MACRO 

để xác định vĩ mô với giá trị:

LOCAL_CFLAGS += -DYOUR_MACRO='"string"' 

hoặc

LOCAL_CFLAGS += -DYOUR_MACRO=123 

cá nhân, tôi đề nghị sử dụng + = thay vì: = để tránh LOCAL_CFLAGS được ghi đè.

Các vấn đề liên quan