是否可以使用带有额外构建步骤的 Go 构建?

问题描述 投票:0回答:3

当 go build 不够,需要在 go build 的同时运行额外的命令时该怎么办? go tools 是否涵盖了这个用例?如果是这样,约定是什么?

我注意到可以传递额外的标志来构建工具:

//#cgo pkg-config: glib-2.0 gobject-2.0 etc etc
import "C"

是否可以运行额外的命令或至少告诉 go build 使用 Makefile?

build go
3个回答
5
投票

不。 go 工具并不是一个通用的构建系统。有一些针对 cgo 的规定(如 pkg-config),但它不可扩展。

在go1.4中会有

generate
命令。这将允许您运行任意命令来预处理源文件,但它始终必须是显式运行的单独步骤。您无法将其挂接到
go get
go build
go install

许多需要更复杂构建的项目使用脚本或 Makefile,并避开通用功能

go get
。然而,库包应该努力做到
get
能够简化依赖性解析。


1
投票

我不相信你可以添加额外的步骤。

pkg-config 是内置构建系统的特殊关键字。

通常,更复杂的构建是通过 makefile 在适当的步骤调用 go build 来完成的。


0
投票

对于那些偶然发现这个问题的人 - 目前已经可以创建自己的构建预处理工具。

为此,您可以使用

-toolexec
标志来指定一个工具,该工具将在构建的每个阶段运行自定义程序:编译、asm、链接。

一个简单的例子:

go build -a -toolexec "yourtool someargs"

这将通过将所有参数传递给

yoortool
来为每个构建步骤运行
yourtool
,这样只要该工具有足够的权限,您就可以执行任何操作。

例如,有多个项目利用它来通过跟踪自动检测 Go 代码。但不幸的是,几乎没有关于如何自己实现此类工具的文档。

您可以观看 Jon Bodners 的演讲的视频,它通过示例以简化但仍然详细的方式描述了原理。

© www.soinside.com 2019 - 2024. All rights reserved.