使用c插件,可以指定可执行文件和库。 我使用字符串标记来指定具有操作系统特定名称的库(稍后在JNI设置中使用)。
import org.apache.commons.lang3.SystemUtils as SU
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.apache.commons:commons-lang3:3.3.2'
}
}
def osString = SU.IS_OS_LINUX ? "linux" : (SU.IS_OS_MAC_OSX ? "macosx" : SU.IS_OS_WINDOWS ? "windows" : "")
assert osString
那是获取操作系统字符串。这里是图书馆的声明:
libraries {
"diaf-${osString}" {}
}
运行时
gradle tasks
在Linux机器上,其中一项任务将是" diaf-linuxSharedLibrary"
如何获取任务输出文件的句柄(在另一个任务中使用)?在这种情况下libdiaf-linux.so? 不使用
中的硬编码路径def path =" $ {buildDir} /build/binaries/diaf-linuxSharedLibrary/libdiaf-linux.so"
答案 0 :(得分:1)
似乎库始终在同一位置创建 - 有关详细信息,请参阅here - 您只需对部分路径进行硬编码。
不幸的是,我还没有对它进行过测试 - 说实话,我不知道如何。
修改强>
您可以在下面找到一个示例脚本(在通过gradle源挖掘后创建),用于打印任务和输出文件。我看到构建本机库的组织方式与其他插件完全不同。希望它能以某种方式帮助你:
apply plugin: 'c'
libraries {
hello {}
}
binaries.withType(SharedLibraryBinarySpec) {
println it.sharedLibraryFile
println it.tasks
}
binaries.withType(StaticLibraryBinarySpec) {
println it.staticLibraryFile
println it.tasks
}
您还可以在$GRADLE_HOME/samples/native-binaries/
下找到一些示例。