У меня есть некоторый уже существующий код, который я пытаюсь скомпилировать в библиотеку NDK. Есть просто #ifndef, который мне нужно выполнить правильно, но в моем Android.mk переменная, которую я определил с помощью LOCAL_CFLAGS, не распознается. Он думает, что это опция командной строки
Когда я запускаю ndk-build с опцией NDK_LOG, все прекрасно скомпилируется, пока я не увижу это:
[armeabi-v7a] Compile++ thumb: NDKImageProcessor <= NDKImageProcessor.cpp
arm-linux-androideabi-g++: error: unrecognized command line option '-WINONLY=1'
make: *** [obj/local/armeabi-v7a/objs/NDKImageProcessor/NDKImageProcessor.o] Error 1
Я просто пытаюсь получить следующее от включения в компиляцию:
#ifndef WINONLY
#import <CoreGraphics/CGGeometry.h>
#endif
Android.mk довольно прост:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NDKImageProcessor
LOCAL_SRC_FILES := NDKImageProcessor.cpp
LOCAL_SRC_FILES += ../../../../SharedSrc/Image.cpp
LOCAL_LDLIBS := -llog
LOCAL_CFLAGS := -WINONLY=1
include $(BUILD_SHARED_LIBRARY)
Если я просто не добавлю эту строку LOCAL_CFLAGS, то компилятор попытается скомпилировать этот код iOS, что, очевидно, не допускается.
От документация GCC (должно быть так же, если вы используете Clang):
-D name
Предопределите имя как макрос, с определением 1.
-D name=definition
Содержаниеdefinition
токены и обрабатываются так, как если бы они появились на третьем этапе перевода в директиве «#define». В частности, определение будет усечено встроенными символами новой строки.
Чтобы определить WINONLY
со значением 1, которое вы используете:
LOCAL_CFLAGS := -DWINONLY=1
или просто
LOCAL_CFLAGS := -DWINONLY