Android Studio NDK Build ninja gcc/clang 命令行选项
Android Studio NDK Build ninja gcc/clang command line options
在新的 Android Studio NDK ninja 构建系统 (v 2.3+) 中,转储实际 gcc/clang 命令行选项的最佳方法是什么?
目前,我故意在我的 C 文件中插入#error 语句:
...
#include <gperf.h>
#error "Compiler, stop!"
#define LOGI(...) \
((void)__android_log_print(ANDROID_LOG_INFO, "hell-libs::", __VA_ARGS__))
这样我就可以获得以下命令行转储:
Build hello-libs arm64-v8a
[1/2] Building CXX object CMakeFiles/hello-libs.dir/hello-libs.cpp.o
FAILED: /Users/me/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++
--target=aarch64-none-linux-android --gcc-toolchain=/Users/me/android-ndk/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64 --sysroot=/Users/me/android-ndk/platforms/android-21/arch-arm64
-Dhello_libs_EXPORTS -I/Users/me/src/opensource/android-ndk/hello-libs/app/src/main/cpp/../../../../distribution/gmath/include -I/Users/me/src/opensource/android-ndk/hello-libs/app/src/main/cpp/../../../../distribution/gperf/include
-isystem /Users/me/android-ndk/sources/cxx-stl/gnu-libstdc++/4.9/include -isystem /Users/me/android-ndk/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/include -isystem /Users/me/android-ndk/sources/cxx-stl/gnu-libstdc++/4.9/include/backward -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -std=gnu++11 -O0 -fno-limit-debug-info -O0 -fno-limit-debug-info -fPIC -MD -MT CMakeFiles/hello-libs.dir/hello-libs.cpp.o -MF CMakeFiles/hello-libs.dir/hello-libs.cpp.o.d -o CMakeFiles/hello-libs.dir/hello-libs.cpp.o -c /Users/me/src/opensource/android-ndk/hello-libs/app/src/main/cpp/hello-libs.cpp
/Users/me/src/opensource/android-ndk/hello-libs/app/src/main/cpp/hello-libs.cpp:24:2: error: "Compiler, stop!"
#error "Compiler, stop!"
^
1 error generated.
ninja: build stopped: subcommand failed.
:app:externalNativeBuildDebug FAILED
根据这个 CMake PR:https://github.com/Kitware/CMake/commit/ce935ebe50926bde199d86fbde4a78974a4043f9
你应该能够通过 -DCMAKE_VERBOSE_MAKEFILE=ON 来获取 Ninja -v,但我一直无法让它工作。我暂时不知道为什么。
我通常获取标志的方式是打开由Android Studio/Gradle自动生成的文件android_gradle_build.json。此文件包含给定 ABI 的每个 c/cpp 文件的所有标志。
在新的 Android Studio NDK ninja 构建系统 (v 2.3+) 中,转储实际 gcc/clang 命令行选项的最佳方法是什么?
目前,我故意在我的 C 文件中插入#error 语句:
...
#include <gperf.h>
#error "Compiler, stop!"
#define LOGI(...) \
((void)__android_log_print(ANDROID_LOG_INFO, "hell-libs::", __VA_ARGS__))
这样我就可以获得以下命令行转储:
Build hello-libs arm64-v8a
[1/2] Building CXX object CMakeFiles/hello-libs.dir/hello-libs.cpp.o
FAILED: /Users/me/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++
--target=aarch64-none-linux-android --gcc-toolchain=/Users/me/android-ndk/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64 --sysroot=/Users/me/android-ndk/platforms/android-21/arch-arm64
-Dhello_libs_EXPORTS -I/Users/me/src/opensource/android-ndk/hello-libs/app/src/main/cpp/../../../../distribution/gmath/include -I/Users/me/src/opensource/android-ndk/hello-libs/app/src/main/cpp/../../../../distribution/gperf/include
-isystem /Users/me/android-ndk/sources/cxx-stl/gnu-libstdc++/4.9/include -isystem /Users/me/android-ndk/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/include -isystem /Users/me/android-ndk/sources/cxx-stl/gnu-libstdc++/4.9/include/backward -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -std=gnu++11 -O0 -fno-limit-debug-info -O0 -fno-limit-debug-info -fPIC -MD -MT CMakeFiles/hello-libs.dir/hello-libs.cpp.o -MF CMakeFiles/hello-libs.dir/hello-libs.cpp.o.d -o CMakeFiles/hello-libs.dir/hello-libs.cpp.o -c /Users/me/src/opensource/android-ndk/hello-libs/app/src/main/cpp/hello-libs.cpp
/Users/me/src/opensource/android-ndk/hello-libs/app/src/main/cpp/hello-libs.cpp:24:2: error: "Compiler, stop!"
#error "Compiler, stop!"
^
1 error generated.
ninja: build stopped: subcommand failed.
:app:externalNativeBuildDebug FAILED
根据这个 CMake PR:https://github.com/Kitware/CMake/commit/ce935ebe50926bde199d86fbde4a78974a4043f9
你应该能够通过 -DCMAKE_VERBOSE_MAKEFILE=ON 来获取 Ninja -v,但我一直无法让它工作。我暂时不知道为什么。
我通常获取标志的方式是打开由Android Studio/Gradle自动生成的文件android_gradle_build.json。此文件包含给定 ABI 的每个 c/cpp 文件的所有标志。