首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >编译时按架构排除go源文件

编译时按架构排除go源文件
EN

Stack Overflow用户
提问于 2013-09-02 11:02:46
回答 1查看 4.2K关注 0票数 9

我正在为Windows编写一个Go程序,其中包含几个包。其中一个包是使用CGo调用一些.h和.c文件中定义的几个函数。这些.c文件依赖于windows.h。

由于在Windows平台上开发非常繁琐,所以我想对这个文件中的函数做一个模型,然后在Linux上进行开发。但是,当我试图编译时,我得到:

代码语言:javascript
代码运行次数:0
运行
复制
fatal error: windows.h: No such file or directory

因为go工具试图编译我的Windows相关文件。有办法绕过这件事吗?我知道把一些东西放在

代码语言:javascript
代码运行次数:0
运行
复制
#ifdef ..
import x
#endif

这不是最佳实践,但在这种情况下,我需要一些东西来允许只编译"Linux“文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-02 11:09:53

引用构建约束文档:

build约束是以指令+build开头的行注释,它列出了包中应该包含文件的条件。约束可能出现在任何类型的源文件中(不仅仅是Go),但是它们必须出现在文件顶部附近,前面只有空行和其他行注释。 要将生成约束与包文档区分开来,必须在一系列生成约束后面加上一个空行。 build约束被计算为空格分隔选项的or;每个选项计算为其逗号分隔的术语的和;每个术语是字母数字词,或者,前面是它的否定词。也就是说,构建约束:

代码语言:javascript
代码运行次数:0
运行
复制
// +build linux,386 darwin,!cgo

对应于布尔公式:

代码语言:javascript
代码运行次数:0
运行
复制
(linux AND 386) OR (darwin AND (NOT cgo))

一个文件可能有多个构建约束。总体约束是单个约束的约束。也就是说,构建约束:

代码语言:javascript
代码运行次数:0
运行
复制
// +build linux darwin
// +build 386

对应于布尔公式:

代码语言:javascript
代码运行次数:0
运行
复制
(linux OR darwin) AND 386

在特定的构建过程中,满足以下几个字:

  • 目标操作系统,如runtime.GOOS拼写的
  • 目标体系结构,由runtime.GOARCH拼写
  • 正在使用的编译器,即"gc“或"gccgo”。
  • "cgo",如果ctxt.CgoEnabled是真的
  • "go1.1",从Go版本1.1开始
  • ctxt.BuildTags中列出的任何附加单词

如果在去掉扩展名和可能的_test后缀后,文件的名称与下列任何模式相匹配:

代码语言:javascript
代码运行次数:0
运行
复制
*_GOOS
*_GOARCH
*_GOOS_GOARCH

(例如: source_windows_amd64.go)或文字:

代码语言:javascript
代码运行次数:0
运行
复制
GOOS
GOARCH

(例如: windows.go),其中GOOS和GOARCH分别代表任何已知的操作系统和体系结构值,那么文件被认为具有一个要求这些术语的隐式构建约束。 若要防止文件被考虑用于生成,请执行以下操作:

代码语言:javascript
代码运行次数:0
运行
复制
// +build ignore

(任何其他不满意的词也会起作用,但“忽略”是传统的。) 仅在使用cgo时,并且仅在Linux和OS上构建文件:

代码语言:javascript
代码运行次数:0
运行
复制
// +build linux,cgo darwin,cgo

这样的文件通常与实现其他系统的默认功能的另一个文件配对,在这种情况下,该文件带有约束:

代码语言:javascript
代码运行次数:0
运行
复制
// +build !linux,!darwin !cgo

命名一个文件dns_windows.go只会导致它只在构建用于math_386.s的包时包含;类似地,只有在为32位x86构建包时才会包含math_386.s。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18571661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档