如何使用Gradle Experimental Plugin设置C / C ++包含路径?

时间:2015-11-11 19:53:01

标签: android-studio gradle android-ndk android-gradle gradle-experimental

Android Studio位于与我的模块的主源文件夹不同的位置时,找不到我的头文件。 #include“SDL_config.h”语句以红色突出显示(其他#include语句很好),这一点很明显。

我已尝试修改下面的cppFlags值,但我开始怀疑这些cppFlag甚至被传递给编译器。

有没有人设法以这种方式包含除主要源文件夹以外的文件夹中的文件?

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

更新:以下是有关我当前项目布局的更多信息:

应用程序/ SRC /主/ 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

4 个答案:

答案 0 :(得分:9)

我使用稍微不同的方法:

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

..这有效。原因可能是编译器使用不同的工作目录启动, absolutePath 解决了这里的任何歧义。

答案 1 :(得分:2)

是的!我想通了 - SDL2源文件是.C文件,所以包含路径需要使用CFlags声明,而不是cppFlags。

答案 2 :(得分:1)

这是使用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')

答案 3 :(得分:0)

对于许多标题路径:

cFlags = "-I" + file("src/main/jni/path1").absolutePath +
     " -I" + file("src/main/jni/path2").absolutePath +
     " -I" + file("src/main/jni/path3").absolutePath