Gradle C(本机)任务输出文件/文件(用于其他任务/项目)

时间:2015-01-06 11:20:53

标签: c++ c gradle native

使用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"

1 个答案:

答案 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/下找到一些示例。