如何使用gradle构建共享库?
我的项目树
核心/c/{*.c,*.h} 核心/c/包括/{jni,lib}
我的build.gradle
apply plugin: 'c'
def JNI_INCLUDE_DIR = this.properties['jni.include.dir']
model {
components {
bridge(NativeLibrarySpec) {
sources.c.source {
srcDir 'core/c'
include '**/*.c'
}
sources.c.exportedHeaders {
srcDir 'core/c/include'
}
buildTypes {
debug
release
}
}
}
toolChains {
gcc(Gcc) {
if(System.properties['os.name'].equals("Mac OS X")) {
cCompiler.withArguments {
args << "-I" + JNI_INCLUDE_DIR
args << "-I" + JNI_INCLUDE_DIR + "/darwin"
args << "-std=gnu11"
args << "-g"
}
} else {
cCompiler.withArguments {
args << "-I" + JNI_INCLUDE_DIR
args << "-I" + JNI_INCLUDE_DIR + "/linux"
args << "-std=gnu11"
args << "-g"
}
}
}
}
}错误
在执行模型规则时引发的异常: org.gradle.nativeplatform.toolchain.internal.gcc.GccToolChain.类型的工具链“GCC”(GNU )的toolChains {.}@ build.gradle第23行第2列无法获得未知属性“cCompiler”
发布于 2016-07-18 20:23:52
class没有属性cCompiler,这就是您获得错误的原因。cCompiler实际上是GccPlatformToolchain的一个属性。Gcc有一个或多个平台工具链的实例。如果要将标志应用于Gcc工具链中的每个平台,可以使用eachPlatform,例如:
toolChains {
gcc(Gcc) {
eachPlatform {
if(System.properties['os.name'].equals("Mac OS X")) {
cCompiler.withArguments {
args << "-I" + JNI_INCLUDE_DIR
args << "-I" + JNI_INCLUDE_DIR + "/darwin"
args << "-std=gnu11"
args << "-g"
}
} else {
cCompiler.withArguments {
args << "-I" + JNI_INCLUDE_DIR
args << "-I" + JNI_INCLUDE_DIR + "/linux"
args << "-std=gnu11"
args << "-g"
}
}
}
}
}我相信,您还可以为给定的操作系统/体系结构定义自定义平台,然后引用Gcc块中的平台,而不是使用if语句,后者可能更简洁、更实用。
https://stackoverflow.com/questions/38423241
复制相似问题