golang專案中使用條件編譯

2022-03-23 05:18:11 字數 1302 閱讀 7618

golang中沒有類似c語言中條件編譯的寫法,比如在c**中可以使用如下語法做一些條件編譯,結合巨集定義來使用可以實現諸如按需編譯release和debug版本**的需求

#ifndef

#define

...#end

golang支援兩種條件編譯的實現方式

build tags 是通過**注釋的形式實現的,要寫在檔案的最頂端;

go build指令在編譯專案的時候會檢查每乙個檔案的build tags,用來決定是編譯還是跳過該檔案

build tags遵循以下規則

不同tag域之間用空格區分,他們是or關係

同一tag域之內不同的tag用都好區分,他們是and關係

每乙個tag都由字母和數字構成,!開頭表示條件「非」

示例:

//

+build darwin freebsd netbsd openbsd

約束此檔案只能在支援kqueue的bsd系統上編譯

乙個檔案可能包含多行條件編譯注釋,比如:

//

+build linux darwin

//+build 386

約束該檔案在linux/386 或 darwin/386平台編譯

需要注意的點

tag注釋和包宣告必須用空行隔開,比如下面的寫法是錯誤的,編譯器會把第一行作為包說明來處理,而不是build tags

1

//+build !linux

2 package mypkg //

wrong

正確的寫法如下:

1

//+build !linux

23 package mypkg //

correct

編譯方法:

只需要在go build指令後用-tags指定編譯條件即可

go build -tags linux

示例:

mypkg_freebsd_arm.go //

只在 freebsd/arm 編譯

mypkg_plan9.go //

只在 plan9 編譯

檔名必須提供,如果只由字尾的檔名會被編譯器忽略,比如:

_linux.go

_freebsd_386.go

這兩個檔案會被編譯器忽略,因為以下劃線開頭的檔案都會被忽略

Golang 編譯 條件編譯

條件編譯 標籤編譯 build tag build build linux and 386 or darwin and not cgo 以 開始,例如 build 支援 goos 與 goarch 並可以具有多個值,用 分割,例如 build linux,darwin,freebsd 支援 不等條件...

golang條件編譯

golang中沒有類似c語言中條件編譯的寫法,比如在c 中可以使用如下語法做一些條件編譯,結合巨集定義來使用可以實現諸如按需編譯release和debug版本 的需求 ifndef define end但是golang支援兩種條件編譯方式 在源 裡新增標註,通常稱之為編譯標籤 build tag 編...

在BREW專案中使用GCC編譯器

最近公司因為版權原因,不能繼續使用ads編譯器,而是換成了免費的gcc編譯器。經過一段時間的試用磨合,現在公司裡大部分應用在生成mod時都使用gcc編譯器。小部分因為容量限制,使用的是公司購買的realview編譯器。gcc 編譯器使用thumb模式生成的mod在手機上跑有問題,尚未解決,因此mod...