如何使用gradle构建共享库?
我的项目树
core / c / {*。c,*。h}
core / c / include / {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"
}
}
}
}
}
错误
执行模型规则时抛出异常:toolChains {...} @ build.gradle第23行,第2列 无法获得未知财产&#c; cCompiler&#39;对于工具链&#39; gcc&#39; (GNU GCC)类型为org.gradle.nativeplatform.toolchain.internal.gcc.GccToolChain。
答案 0 :(得分:0)
The Gcc
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语句,这可能更清晰,更具惯用性。