2016-10-25 1 views
1

Ich versuche meine bestehenden CMake-Skripte in Android Studio/Gradle zu integrieren. Ich habe es mit CMake generieren und bauen, aber aus welchem ​​Grund auch immer, die CPP-Flags, die ich in meinen CMake-Skripten angeben, werden nicht verwendet, wenn Gradle ausgeführt wird. Ich möchte, dass meine CMake-Skripte die volle Kontrolle über Einstellungen wie -std=c++14, -fexceptions usw. haben. Alles was ich wirklich brauche, um Gradle zu erledigen, ist eine Toolchain-Datei zur Angabe der Toolset-Informationen (Compiler, Pfad zu Includes usw.). Ich nehme an, Gradle versucht, mehr Kontrolle über CMake zu erlangen als nötig (zumindest soweit ich das beurteilen kann).Wie kann ich verhindern, dass Gradle/Android Studio die von CMake bereitgestellten C++ - Compilereinstellungen überschreibt?

Gibt es eine Möglichkeit, dass Gradle diese CMake-Einstellungen nicht überschreibt? Es wird mühsam sein, diese Einstellungen zwischen Gradle und CMake-Skripten selbst zu pflegen und zu duplizieren. Bisher bin ich wirklich kein Fan der Gradle-Integration von CMake, sie scheinen ihre eigene, von Hand erstellte Version mit benutzerdefinierten Patches zu verwenden.

Antwort

0

Gradle überschreibt keine CMake C++ Flags. Was Sie sehen, ist wahrscheinlich die Android SDK CMake Toolchain, die Tools, C++ - Flags und per-ABI-Konfiguration einrichtet.

Hier ist, wie gradle CMake nennt:

{root}/Sdk/cmake/3.6.3155560/bin/cmake 
-H{project}/app 
-B{project}/app/.externalNativeBuild/cmake/debug/arm64-v8a 
-GAndroid Gradle - Ninja 
-DANDROID_ABI=arm64-v8a 
-DANDROID_NDK={root}/Sdk/ndk-bundle 
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={project}/app/build/intermediates/cmake/debug/obj/arm64-v8a 
-DCMAKE_BUILD_TYPE=Debug 
-DCMAKE_MAKE_PROGRAM={root}/Sdk/cmake/3.6.3155560/bin/ninja 
-DCMAKE_TOOLCHAIN_FILE={root}/Sdk/ndk-bundle/build/cmake/android.toolchain.cmake 
-DANDROID_PLATFORM=android-21 

Sie sehen können, was sie für Ihren speziellen Fall ist, indem einer der cmake_build_output.txt Dateien suchen, die generiert Gradle.

Sie können android.toolchain.cmake betrachten, um zu sehen, wann und wie die Toolchain bestimmte Flags setzt. (Sie können Fehler in dieser Datei öffnen und Feedback geben, indem Sie auf b.android.com gehen. Wenn Sie cc [email protected] Ich werde sicherstellen, dass es an die richtige Person gelangt). Wir planen definitiv auch, die Dokumentation zu verbessern, und Sie können Bugs für Vorschläge zur Verbesserung der Dokumentation öffnen.

Sie sollten in der Lage sein, eigene Flags wie -fexceptions an die von der Toolchain gesetzten Werte anzuhängen, und Ihre Werte überschreiben alle vorherigen Werte. Wenn dies nicht das ist, was Sie sehen, können Sie weitere Details dazu angeben, wie Ihre CMakeLists.txt eingerichtet ist?

+0

Nein, wenn ich direkt mit CMake erzeuge und direkt auf die NDK-Toolchain-Datei zeige, werden meine Compiler-Flags NICHT überschrieben. Es ist definitiv Android Studio/Gradle, das etwas Besonderes macht. Sieht so aus, als ob sie eine separate Toolchain-Datei anstelle der von NDK bereitgestellten verwenden. R12 –

+0

Könnten Sie eine Repro erstellen? –

Verwandte Themen