【问题标题】:Android C++/Gradle/NDK: what flags should I pass to cppFlags, cFlags or arguments?Android C++/Gradle/NDK:我应该将哪些标志传递给 cppFlags、cFlags 或参数?
【发布时间】:2021-07-12 11:18:45
【问题描述】:

我在这里看到了 NDK 项目的 Gradle 文件的典型示例。

不过,我想知道在哪里放置不同标志的规则是什么:

    // Passes optional arguments to CMake.
       arguments "-DANDROID_ARM_NEON=TRUE", "-DANDROID_TOOLCHAIN=clang"
    
    // Sets a flag to enable format macro constants for the C compiler.
       cFlags "-D__STDC_FORMAT_MACROS"
    
   // Sets optional flags for the C++ compiler.
      cppFlags "-fexceptions", "-frtti"

例如,为什么“-fexceptions”、“-frtti”在“cppFlags”中而不在“arguments”中?有哪些决定规则以及对编译/应用运行时/性能的影响?

谢谢。

【问题讨论】:

    标签: android cmake android-ndk


    【解决方案1】:

    您链接到的 sn-p 清楚地表明了每个设置的受众:

    1. 当 Gradle 需要构建应用程序的本机组件时,它会为范围内的每个 ABI 调用 CMake。因此,arguments 用于 CMake 调用。
    2. CMake 本身并不真正构建您的原生组件,它只是为您的构建系统设置一组文件。此工具通常是 Ninja 或 Make。
    3. cFlags 和cppFlags 嵌入在各自文件的构建规则中。带有.c 扩展名的文件是使用C 编译器构建的,因此它们得到cFlags,同样,cppFlags 对应.cpp 或.cc。这些标志如何到达各自编译器的确切机制不是很有趣,所以我将跳过它。

    要回答您的最后一个问题:您需要检查您的 CMakeLists.txt 以查看它查找和解释的属性。还有一大堆CMake built-in variables 可以从命令行设置。

    您可以咨询Clang user's guide 和Clang commandline reference。通常,您可以从描述中判断它是 C 标志还是 C++ 标志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-28
      • 2016-08-08
      • 2018-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2012-12-26
      相关资源
      最近更新 更多