Почему компилятор NDK не распознает определение LOCAL_CFLAGS?

У меня есть уже существующий код, который я пытаюсь скомпилировать в библиотеку 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, что, очевидно, невозможно.


person Alyoshak    schedule 09.09.2015    source источник
comment
Вы, вероятно, хотите add_definitions. В конце концов, это также оказывается в командной строке компилятора, но семантически немного яснее.   -  person MSalters    schedule 10.09.2015
comment
@MSalters, спасибо за помощь. Я попробовал до н.э. Майкла, он был первым, и он работал нормально.   -  person Alyoshak    schedule 10.09.2015


Ответы (1)


Из документации GCC (она должна быть такой же, если вы используете Clang):

-D name
Предопределить имя как макрос с определением 1.

-D name=definition
Содержимое definition размечается и обрабатывается так, как если бы оно появилось на третьем этапе преобразования в директиве #define. В частности, определение будет усечено встроенными символами новой строки.

Итак, чтобы определить WINONLY со значением 1, вы должны использовать:

LOCAL_CFLAGS := -DWINONLY=1

или просто

LOCAL_CFLAGS := -DWINONLY
person Michael    schedule 10.09.2015
comment
это было все. Отдельное спасибо за подробный ответ с примером. - person Alyoshak; 10.09.2015