gpt4 book ai didi

gradle - 如何在Groovy追加函数中捕获变量?

转载 作者:行者123 更新时间:2023-12-03 03:08:16 25 4
gpt4 key购买 nike

我正在编写一个Gradle任务,为正在生成的可执行文件定义全局 Artifact 标记。此任务将创建一个C文件,该文件随后将打包到包含其他源代码的可执行文件中。

task genArtifactMarker{
project.ext.HASH = "git rev-parse --short HEAD".execute().text
project.ext.ARTIFACT_VERSION = "$PROJECT-$VERSION-$HASH"
def version_file = new File('version.c')
version_file.append('\n/* Automatically generated file for marker */')
version_file.append('\nconst volatile char marker[] __attribute__ ((section ("MARKER"))) = "${ARTIFACT_VERSION}";')
}

如何在附加函数中捕获 ARTIFACT_VERSION变量?我想在生成的 MY_EXE-V2.1.2-47add78文件中将 ARTIFACT_VERSION替换为 version.c

编辑:

添加代码以帮助请求调试。
task genArtifactMarker{
doLast{
project.ext.HASH = "git rev-parse --short HEAD".execute().text
def ARTIFACT_VERSION = "$PROJECT-$VERSION-$HASH"
def version_file = new File('version.c')
version_file.append('\n/* Automatically generated file for marker */')
version_file << """\nconst volatile char marker[] __attribute__ ((section ("MARKER"))) = "${ARTIFACT_VERSION}";"""
}
}

我的输出如下:
/* Automatically generated file for marker */ 
const volatile char marker[] __attribute__ ((section ("MARKER"))) = "RPI-V2.1.2_PO3-e75ee8d
";

我希望我的输出如下:
/* Automatically generated file for marker */ 
const volatile char marker[] __attribute__ ((section ("MARKER"))) = "RPI-V2.1.2_PO3-e75ee8d";

最佳答案

合并以上答案并在groovy中为文件添加 << append operatortriple double quoted strings我们得到:

ext { 
version_file = file('text.txt')
ARTIFACT_VERSION ="1.0"
}

task genArtifactMarker {
doLast {
version_file << """\nconst volatile char marker[] __attribute__ ((section ("MARKER"))) = "${ARTIFACT_VERSION}";"""
}
}

或者如果您需要控制多行字符串的缩进级别:
task genArtifactMarker {
doLast {
version_file << """
|const volatile char marker[] __attribute__ ((section ("MARKER"))) = "${ARTIFACT_VERSION}";
|
|more text needing correct indentation
|""".stripMargin()
}
}

当我们使用 doLast块时,我们现在在gradle的执行阶段中执行代码,并且由于我们使用的是三重引号,因此我们不需要在字符串内使用反斜杠字符对引号进行转义。

groovy stripMargin()方法可用于在代码中很好地对齐多行字符串,而不会影响结果字符串的格式。

编辑:响应评论,这是该代码的最新版本的输出:
$ ls -l
total 4
-rw-r--r-- 1 mbjarland mbjarland 628 Feb 7 15:08 build.gradle

$ gradle genArtifactMarker
:genArtifactMarker

BUILD SUCCESSFUL

Total time: 1.102 secs

$ ls -l
total 8
-rw-r--r-- 1 mbjarland mbjarland 628 Feb 7 15:08 build.gradle
-rw-r--r-- 1 mbjarland mbjarland 115 Feb 8 15:26 text.txt

$ cat text.txt

const volatile char marker[] __attribute__ ((section ("MARKER"))) = "1.0";

more text needing correct indentation

关于gradle - 如何在Groovy追加函数中捕获变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42090678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com