web-dev-qa-db-ja.com

Gradle Experimental PluginでC / C ++インクルードパスを設定するにはどうすればよいですか?

モジュールのメインソースフォルダーとは異なる場所にあるヘッダーファイルをAndroidStudioが見つけることができません。これは、#include "SDL_config.h"ステートメントが赤で強調表示されていることでわかります(他の#includeステートメントでも問題ありません)。

以下のcppFlags値を変更しようとしましたが、これらのcppFlagsがコンパイラーに渡されているのではないかと疑い始めています。

この方法で、メインのソースフォルダ以外のフォルダのファイルを含めることができた人はいますか?

CppFlags、おそらくmoduleName、さらにはソースを指定する方法に問題がありますか?

私はSDL2ソースを通過し、相対の#includeパスへの#include文のすべてを修正するが、私は本当にSDL2ソースを変更する必要はありませんでした。どういうわけか、インクルードパスのリストを指定できるはずです。

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']
            }
        }
    }
...
}

更新:現在のプロジェクトレイアウトの詳細は次のとおりです。

app/src/main/jni app/src/main/jni/src/Main.cpp <-これはコンパイル中ですapp/src/main/jni/SDL2 <-すべてのSDL2ソースはここの下にありますapp/src/main/jni/GLM <-すべてのGLMソースはここにあります

このレイアウトは、ここで提供されたサンプルプロジェクトを使用した直接の結果です: https://gitlab.com/scannerdarkly/hello-sdl-Android

そのプロジェクトは、コマンドラインからndk-buildを使用してビルドされます-Android Studio内でビルドすることで、さらに一歩進めたいと思いました。私のプロジェクトは、GLES2デバイスで三角形を描画しようとします。

これまでの私の現在のプロジェクトへのリンクは次のとおりです。

http://www.mediafire.com/download/92577p7vf123l72/hello-sdl-Android.Zip

6
SparkyNZ

はい!私はそれを理解しました-SDL2ソースファイルは.Cファイルであるため、インクルードパスはcppFlagsではなくCFlagsを使用して宣言する必要があります。

2
SparkyNZ

私は少し異なるアプローチを使用します:

cFlags += "-I" + file("src/main/jni/SDL2/include").absolutePath

..そしてこれは機能します。その理由はおそらく、コンパイラが別の作業ディレクトリで起動され、absolutePathがここでのあいまいさを解決するためです。

9
Alex Cohn

これは、gradle実験プラグインを使用したヘッダーパスを増やすための別のスタイルです。opensslといくつかの「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

多くのヘッダーパスの場合:

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