J'utilise Android-Clake pour compiler une application pour Android. Cela crée essentiellement un fichier Toolchain de CMAKE pour l'utilisation de la boîte à outils fournie avec NDK d'Android.
comme avec Cette question connexe , j'ai des problèmes avec la ligne suivante dans mon fichier cmakelists.txt: p> Le fichier d'en-tête est situé à P> /Users/martin/Android/android-ndk-r7/platforms/android-8/arch-arm
3 Réponses :
Réglage CUKE_Include_Path CODE> affectera uniquement le cmake < Code> Find_File Code> et
Find_Path code>
commandes. La fonction check_include_files code> appelée par FindThreads.Cmake n'honore pas cette variable. Pour
check_include_files code> Vous pouvez définir la variable
cumake_required_includes code> à la place:
De la lecture supplémentaire de FindThreads.Clake Cette réponse est logique, mais elle ne résout pas mon problème pour une raison quelconque. Threads_found n'est toujours pas défini. Je vais essayer de déboguer plus et de mettre à jour ma question quand je trouve le problème. Merci.
J'ai trouvé la solution à ce problème après beaucoup de débogage et c'est assez étrange. Essentiellement, FindThreads.Cmake appelle une macro appelée Notez qu'il utilise Utilisation d'Android-Cumake, le La macro try_compile échoue et selon le fichier CMakeError.log contient les éléments suivants: p> Si vous faites défiler vers la droite de la ligne de compilateur réelle (deuxième du bas), vous pouvez voir le La solution à ceci est de modifier android.toolchaain.cmake.cmake pour supprimer les citations échappées telles qu'elles sont inutiles. P> check_include_files code> qui tente de
try_compile code> un fichier source qui inclut simplement les en-têtes que le
check_include_files code> est fourni avec .
cmake_required_includes code> comme suggéré par @sakra, c'est utile. p>
try_compile code> macro tente de Compilez avec le compilateur ARM-Linux-AndroideaBI-GCC de la NDK avec tous les indicateurs de compilation spécifiés. Le fichier android.toolchain.cmake contient les lignes suivantes qui définissent certaines de ces indicateurs de compilation: p>
- sysroot =; / ... ... code> section. Même si les lignes de cumake ci-dessus utilisent des cordes échappées, la cmake a transformé cette première citation échappée en un point-virgule et laissa la seconde comme une citation normale, ce qui entraîne un point-virgule dans la ligne de sysroot puis un littéral de chaîne contenant toutes les cumakes_cxx_flags ensuite (facile à voir avec Syntaxe de So's Syntaxe). p>
if( BUILD_WITH_ANDROID_NDK )
set( CMAKE_CXX_FLAGS "--sysroot=${ANDROID_NDK_SYSROOT} ${CMAKE_CXX_FLAGS}" )
set( CMAKE_C_FLAGS "--sysroot=${ANDROID_NDK_SYSROOT} ${CMAKE_C_FLAGS}" )
ok donc je suis sur CMAKE . Ce problème se présente, comme vous le savez probablement, car Android inclut 3.18.1-g262b901 code>, NDK
21.4.7075529 code>, android Studio
2020.3.1 code>.
pthread.h code> dans libc ++, il n'y a donc pas de package pour Pthread. Le fichier
windethreads.cmake code> qui
wind_package (threads requis) code> utilise une tentative de tenir compte de telles choses ICI en essayant de compiler un programme avec
#include" pthread.h " code > et sur le succès prétendra que cela trouvera un colis. p>
check_include_file code> macro j'ai trouvé Échec de l'erreur suivante P>
include(CheckIncludeFile)
CHECK_INCLUDE_FILE("pthread.h" TEST)
message("TEST: ${TEST}")