Android Studio ne peut pas trouver mes fichiers d'en-tête lorsqu'ils se trouvent dans un emplacement différent du dossier source principal de mon module. Cela se remarque par les instructions #include "SDL_config.h" mises en surbrillance en rouge (les autres instructions #include conviennent parfaitement).
J'ai essayé de modifier les valeurs cppFlags ci-dessous, mais je commence à douter que ces cppFlags soient même transmis au compilateur.
Quelqu'un at-il réussi à inclure des fichiers de dossiers autres que leur dossier source principal de cette manière?
Y at-il un problème avec la façon dont j'ai spécifié le cppFlags, ou peut-être le moduleName ou même les sources?
Je pourrais passer par la source SDL2 et modifier toutes les instructions #include en chemins relatifs #include, mais je ne souhaite pas vraiment modifier la source SDL2. Je devrais simplement pouvoir spécifier une liste de chemins d'inclusion.
apply plugin: 'com.Android.model.application'
model {
...
Android.ndk {
moduleName = 'main'
//W:\hello-sdl-Android\android-project\app\src\main\jni\SDL2\include
cppFlags += "-I${file("src/main/jni/SDL2/include")}".toString()
cppFlags += "-I${file("src/main/jni/SDL2/src")}".toString()
}
Android.sources {
main.jni {
source {
srcDirs += ['src/main/jni/src']
srcDirs += ['src/main/jni/SDL2/src']
}
}
}
...
}
UPDATE: Voici plus d'informations sur la mise en page actuelle de mon projet:
app/src/main/jni app/src/main/jni/src/Main.cpp <- Ceci compile app/src/main/jni/SDL2 <- Toutes les sources SDL2 sont sous ici app/src/main/jni/GLM <- Toutes les sources de GLM se trouvent ici
Cette mise en page est le résultat direct de l’exemple de projet qui m’a été fourni ici: https://gitlab.com/scannerdarkly/hello-sdl-Android
Ce projet sera construit en utilisant ndk-build à partir de la ligne de commande - je voulais aller encore plus loin en construisant dans Android Studio. Mon projet va tenter de dessiner un triangle sur un périphérique GLES2.
Voici un lien vers mon projet actuel à ce jour:
http://www.mediafire.com/download/92577p7vf123l72/hello-sdl-Android.Zip
Oui! Je l'ai compris - les fichiers source SDL2 sont des fichiers .C; les chemins d'inclusion doivent donc être déclarés à l'aide de CFlags, pas de cppFlags.
J'utilise une approche légèrement différente:
cFlags += "-I" + file("src/main/jni/SDL2/include").absolutePath
.. et ça marche. La raison en est probablement que le compilateur est lancé avec un répertoire de travail différent, et absolutePath résout toute ambiguïté ici.
Voici un autre style pour plus de chemins d’en-tête utilisant le plugin gradle experimental, exemple avec openssl et une bibliothèque "abc":
// compile parameters
// include openssl headers C (if you have C files)
CFlags.add("-isystem${project.rootDir}/external-libraries/openssl/openssl-1.0.2g/include".toString())
// include openssl headers C++ (if you have cpp files)
cppFlags.add("-isystem${project.rootDir}/external-libraries/openssl/openssl-1.0.2g/include".toString())
// include abc headers C (if you have C files)
CFlags.add("-I${project.rootDir}/external-libraries/abc/abc-5.5/include".toString())
// include abc headers C++ (if you have cpp files)
cppFlags.add("-I${project.rootDir}/external-libraries/abc/abc-5.5/include".toString())
// linking parameters
// link libcrypto.so
ldFlags.add("-L${project.rootDir}/external-libraries/openssl/openssl-1.0.2g/lib/armeabi-v7a".toString())
ldLibs.add('crypto')
// link libabc.so
ldFlags.add("-L${project.rootDir}/external-libraries/abc/abc-5.5/lib".toString())
ldLibs.add('abc')
pour de nombreux chemins d'en-tête:
cFlags = "-I" + file("src/main/jni/path1").absolutePath +
" -I" + file("src/main/jni/path2").absolutePath +
" -I" + file("src/main/jni/path3").absolutePath