我正在使用 -Werror
标志将所有警告视为代码中的错误。但是,我希望从代码发出的编译警告仍被视为警告。 GCC 选项是 -Wno-error=cpp
可以正常工作,但是 clang 选项是 -Wno-error=#warnings
我不知道如何传递从 Android.mk
到 clang
。
我已经试过了:
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/