android - 如何在 Android.mk 中正确转义散列?

标签 android makefile android-ndk ndk-build

我正在使用 -Werror 标志将所有警告视为代码中的错误。但是,我希望从代码发出的编译警告仍被视为警告。 GCC 选项是 -Wno-error=cpp 可以正常工作,但是 clang 选项是 -Wno-error=#warnings 我不知道如何传递从 Android.mkclang

我已经试过了:

ifeq "$(findstring clang,$(NDK_TOOLCHAIN_VERSION))" "clang"
    LOCAL_CFLAGS += -Wno-error=#warnings
endif

和这个(如 this SO answer 中所建议):

ifeq "$(findstring clang,$(NDK_TOOLCHAIN_VERSION))" "clang"
    LOCAL_CFLAGS += -Wno-error=\#warnings
endif

但是,两个版本都将 # 视为注释的开始,并且 ndk-build-Wno-error= 传递给编译器(即之后的所有内容= 被忽略) - 我用 ndk-build -n 检查了它。

我什至尝试过

ifeq "$(findstring clang,$(NDK_TOOLCHAIN_VERSION))" "clang"
    LOCAL_CFLAGS += -Wno-error=\\#warnings
endif

产生 -Wno-error=\ 编译器标志。

如何从 Android.mk 文件正确地将此编译器标志传递给 clang?

我正在使用 NDK r12b。

编辑: 我什至试过这个:

ifeq "$(findstring clang,$(NDK_TOOLCHAIN_VERSION))" "clang"
    VAR=\#warnings
    $(info VAR is '$(VAR)')
    LOCAL_CFLAGS += -Wno-error=$(VAR)
endif

ndk-build 首先输出消息 VAR is '#warnings' 但编译器参数包含 -Wno-error=。这显然是一个 NDK 问题。

最佳答案

LOCAL_CFLAGS += -Wno-error=\#warnings

快到了。但是要让 make\ 视为转义 # 它需要在引用的上下文中。

生成文件

CXX := clang++

CXXFLAGS += "-Wno-error=\#warnings"

hello: HelloWorld.o
    $(CXX) -o $@ $^ 

构建并运行:

$ make && ./hello
clang++ "-Wno-error=#warnings"   -c -o HelloWorld.o HelloWorld.cpp
clang++ -o hello HelloWorld.o
Hello World

关于android - 如何在 Android.mk 中正确转义散列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38396721/

相关文章:

Android 虚拟设备加载操作系统时间过长

java - AlertDialog.Builder 错误

c++ - 无法在 makefile 中链接 opengl 库

c++ - 找不到 opencv naclport 构建输出

安卓NDK : Static compilation with CLang error

android - 无法将多个 fragment 添加到 LinearLayout

java - VariableDeclaratorId 和错位构造错误。安卓

c++ - 跨平台构建库而不运行所有平台

Android Ndk(未找到 xxxxx 的实现)

android - 在android中使用ffmpeg时出现乱码