首页 > 学院 > 开发设计 > 正文

Gradle 1.12用户指南翻译——第五十四章. 构建原生二进制文件

2019-11-08 02:39:59
字体:
来源:转载
供稿:网友
其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc本文翻译所在分支:https://github.com/msdx/gradledoc/tree/1.12。直接浏览双语版的文档请访问:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html。另外,Android 手机用户可通过我写的一个程序浏览文档,带缓存功能的,目前0.5版本兼容 Android 2.3以上系统,项目地址如下:https://github.com/msdx/gradle-doc-apk翻译不易,转载请注明本文在CSDN博客上的出处:http://blog.csdn.net/maosidiaoxian/article/details/55683474

关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qiniudn.com 上的文档为准。如发现翻译有误的地方,将首先在以上两个地方更新。因时间精力问题,博客中发表的译文基本不会同步修改。

另外,目前Gradle1.12版本的文档进入校稿阶段,校稿的方式可以为到该项目https://github.com/msdx/gradledoc 提交issue或是pull request。校稿的结果不只是在此版本更新,也会用于改善Gradle下一版本(2.0)文档的翻译。

第五十四章. 构建原生二进制文件

Gradle 对构建原生二进制文件的支持目前还是孵化阶段。请务必注意,在以后的 Gradle 版本中,相关的 DSL 和其他配置可能会有所改变。

不同的原生二进制插件添加了对从C++,C,Objective-C,Objective-C++以及汇编源文件构建原生软件组件的支持。虽然对于这种软件开发的空间,已经有许多优秀的构建工具存在,但是Gradle 向开发人员提供的是它的强大特征和灵活性,以及在依赖管理实践上,在JVM开发空间上更为传统的发现。

54.1. 工具链支持

Gradle 提供了使用不同的工具链执行相同的构建的能力。你可以通过更改操作系统的PATH让其包含所需的工具链编译器,来控制使用哪个工具链。或者,你可以直接配置工具链,就如下面的“原生二进制变种”中描述的。

支持以下的工具链:

操作系统工具链备注
linuxGCC 
LinuxClang 
Mac OS XGCC使用 XCode 中的 GCC。
Mac OS XClang使用 XCode 中的 Clang。
WindowsVisual C++Windows xp及以上,Visual C++ 2010 及以上版本。
WindowsGCCWindows XP及以上,使用Cygwin的GCC。
WindowsMinGWWindows XP 及以上。

54.2. 组件模型

一个原生二进制PRoject定义了一组ExecutableLibrary组件,每一个的 Gradle 都映射大量的NativeBinary输出。对于每个定义的executablelibrary,Gradle 添加了具有相同名称的FunctionalSourceSet 。这些功能源码集将为project所支持的每一种语言包含指定语言的源码集。

为构建一个静态或共享的原生库二进制文件,一个Library组件将添加到libraries容器中。每个library组件可以产生至少一个SharedLibraryBinary和至少一个StaticLibraryBinary

示例 54.1. 定义一个库组件

build.gradle

build.gradle

ExecutableExecutableBinary$component.nameExecutable$buildDir/binaries/$binary.name/$component.nameLibrarySharedLibraryBinary$component.nameSharedLibrary$buildDir/binaries/$binary.name/lib$component.name.soLibraryStaticLibraryBinary$component.nameStaticLibrary$buildDir/binaries/$binary.name/$component.name.a

54.3.1. 使用共享库

对于每个产生的可执行二进制文件, cpp插件提供了install${binary.name}任务,这个任务可以创建该可执行文件及它需要的共享库的开发安装。它允许你运行可执行文件,而无需在其最终的位置安装共享库。

544.核心语言支持: C、C++、汇编,Objective-C和Objective-C++

目前,Gradle 支持从C++,C,Assembler,Objective-C 和 Objective-C++源码的任意组合中构建原生二进制文件。一个原生二进制project 将包含一个或多个叫做FunctionalSourceSet的实例(如"main","test"等),其中每一个都可以包含含有C++,C,Assembler,Objective-C或Objective-C++源代码的LanguageSourceSets。

54.4.1. C++ 源代码

'cpp' 插件提供了C++ 语言的支持。

示例 54.3. cpp 插件

build.gradle

build.gradle

'c' 插件提供了C 语言的支持。

示例 54.5. “C” 插件

build.gradle

build.gradle

“assembler” 插件提供了汇编语言的支持。

示例 54.3. assembler 插件

build.gradle

'objective-c' 插件提供了Objective-C 语言的支持。

示例 54.8. “objective-c”插件

build.gradle

'objective-cpp' 插件提供了Objective-C++ 语言的支持。

示例 54.9. “objective-cpp” 插件

build.gradle

build.gradle

build.gradle

build.gradle

build.gradle

build.gradle

build-resource-only-dll.gradle

build-resource-only-dll.gradle

build.gradle

build.gradle

build.gradle

build.gradle

build.gradle

build.gradle

build.gradle

build.gradle

build.gradle

Gcc

Clang

VisualCpp

示例 54.26. 定义工具链

build.gradle

suite_Operators.c

build.gradle

build.gradle

apply plugin: "c"apply plugin: "cunit"model {    flavors {        passing        failing    }    repositories {        libs(PrebuiltLibraries) {            cunit {                headers.srcDir "lib/cunit/2.1-2/include"                binaries.withType(StaticLibraryBinary) {                    staticLibraryFile = file("lib/cunit/2.1-2/lib/" + findCUnitLibForPlatform(targetPlatform))                }            }        }    }}libraries {    operators {}}binaries.withType(TestSuiteExecutableBinary) {    lib library: "cunit", linkage: "static"    if (flavor == flavors.failing) {        cCompiler.define "PLUS_BROKEN"    }}

注意︰ 此示例的代码可以在Gradle 的 binary 或 source 分发包的samples/native-binaries/cunit中找到。。

> gradle -q runFailingOperatorsTestCUnitExeThere were test failures:  1. /home/user/gradle/samples/native-binaries/cunit/src/operatorsTest/cunit/test_plus.c:6  - plus(0, -2) == -2  2. /home/user/gradle/samples/native-binaries/cunit/src/operatorsTest/cunit/test_plus.c:7  - plus(2, 2) == 4:runFailingOperatorsTestCUnitExe FAILEDBUILD FAILEDTotal time: 1 secs

当前对 CUnit 的支持还是相当简陋。未来的集成计划包括:

允许测试声明为 javadoc 风格的注解。

改进 HTML 报告,类似于 JUnit 提供的那样。

测试执行的的实时反馈。

支持另外的测试框架。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表