web-dev-qa-db-fra.com

Comment définir un chemin d'inclusion C/C++ avec Gradle Experimental Plugin?

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

6
SparkyNZ

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.

2
SparkyNZ

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.

9
Alex Cohn

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')
1
peceps

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
0
Elhassane NAIM