2014-04-07 120 views
0

My Go軟件包包含一個.c文件,該文件使用需要特定CFLAGS集的庫。在命令行中「去安裝」我可以指定CGO_CFLAGS所需的標誌,並且一切正常。不過,我想這樣做是爲了讓某人可以「獲取」我的包並在不傳遞任何額外的命令行參數的情況下構建它。在Go包中持久地設置CGO_CFLAGS?

Go包裝系統是否提供了一個我可以放置這樣的配置的地方,以指定在包裝時總是需要的一些參數?

(我知道圍棋源文件做#cgo CFLAGS:指令,但記得,在我的包我有一個.c的源代碼文件,所以需要CGO_CFLAGS設置爲整個構建過程)

回答

5

CGO提取物你的#cgo CFLAGS:到構建期間的環境變量(通過「-x」標記到去構建)。如果你去安裝-x你會發現它支持你的Go庫中指定的cflags/ldflags。換句話說,它應該只是在Go文件中指定它們。

+0

@kdt,這在[文檔](http://golang.org/cmd/cgo)中都有解釋。 – kostix

+0

@Erikw謝謝,我不知何故知道我的.go文件中的選項沒有被應用到.c文件,但你說得很對。 – kdt

0

爲了使用您的任何C函數,你仍然有一些CGO混入你的。去的文件,這些文件只是聲明你的標誌,例如:

test.go:

package main 

import "fmt" 

/* 
#cgo CFLAGS: -DTEST 
#include <stdio.h> 
extern void ACFunction(); 
*/ 
import "C" 

//export AGoFunction 
func AGoFunction() { 
     fmt.Println("AGoFunction()") 
} 

func main() { 
     C.ACFunction() 
} 

test.c的:

#include "_cgo_export.h" 
void ACFunction() { 
#ifdef TEST 
     printf("ACFunction()\n"); 
#endif 
     AGoFunction(); 
} 

在同一目錄下把這些都會讓go build皮卡test.go定義的標誌和建築test.c.當他們申請

+0

只要注意,只要您不調用'AGoFunction',即使不包含'_cgo_export.h',它也可以工作。在編譯當前包目錄中的任何c文件時,Go將CFLAGS傳遞給編譯器。 – photoionized