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...