0

我有一些预先存在的代码正在尝试编译到 NDK 库中。我需要正确执行一个简单的#ifndef,但在我的 Android.mk 中,我用 LOCAL_CFLAGS 定义的 var 无法识别。它认为这是一个命令行选项

当我使用 NDK_LOG 选项运行 ndk-build 时,它编译得很好,直到我看到:

[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 代码,这显然是不行的。

4

1 回答 1

1

来自GCC 文档(如果您使用 Clang,它应该是相同的):

-D name
将名称预定义为宏,定义为 1。

-D name=definition
的内容definition被标记和处理,就好像它们出现在“#define”指令中的第三阶段翻译一样。特别是,定义将被嵌入的换行符截断。

因此,WINONLY要使用值 1 进行定义,您将使用:

LOCAL_CFLAGS := -DWINONLY=1

或者干脆

LOCAL_CFLAGS := -DWINONLY
于 2015-09-10T05:28:20.540 回答