【问题标题】:How to properly escape hash in Android.mk?如何在 Android.mk 中正确转义哈希?
【发布时间】:2016-07-15 12:56:13
【问题描述】:

我使用-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 问题。

【问题讨论】:

    标签: android makefile android-ndk ndk-build


    【解决方案1】:
    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
    

    【讨论】:

    • 试过了。在命令行中以"-Wno-error= 结尾。这似乎是 NDK 问题,而不是 makefile 问题。我已经报告了这个问题here
    猜你喜欢
    • 2017-12-22
    • 1970-01-01
    • 2018-02-01
    • 2011-06-27
    • 1970-01-01
    • 2017-05-28
    • 2015-12-23
    • 2013-04-21
    相关资源
    最近更新 更多