c++ - Gradle C( native )任务输出文件/文件(用于其他任务/项目)

标签 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"

?

最佳答案

库似乎总是在同一位置创建 - 参见 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/ 下找到一些示例。

关于c++ - Gradle C( native )任务输出文件/文件(用于其他任务/项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27797552/

相关文章:

gradle - 'gradle clean'似乎杀死了我的目标目录

java - STS/Eclipse错误:从插件调用代码时出现问题: “org.eclipse.core.resources”

c++ - 对于繁重的写入应用程序,iostream::rdbuf() 的最佳大小是多少?

c++ - 头文件中的变量声明 - 静态与否?

c - 当给出指向节点的指针时,删除单链表中的节点。分配指针不起作用

将 RGB 数组转换为 Mat (OpenCv)

c - 一些链表C宏的问题

两个不同函数签名的 C++ 重新定义错误

c++ - 如何在主窗口标签的对话框中显示QLineEdit的输入?

maven - Gradle:无效发布 'maven': Artifact 文件不存在