如何在不使用make的情况下使用cgo?

时间:2011-12-12 21:05:39

标签: makefile go

我使用自定义构建工具来编译项目,我需要一种在项目中使用cgo的方法。

问题是cgo文档只告诉你如何在make中使用它。

我真正需要知道的是,哪些生成的文件要处理哪些工具以及需要执行的顺序。我试着在go source目录中读取make.pkg,但我的努力失败了。

我的测试dll非常简单,一个函数每次调用时返回1,使用此函数的go代码同样简单。

通过在cgo项目上成功运行make生成的控制台输出将非常有用。

2 个答案:

答案 0 :(得分:3)

在目录misc/cgo/life中的32位Linux上运行make的输出:

# gomake _obj/life.a
CGOPKGPATH= cgo --  life.go 
touch _obj/_cgo_run
8g  -o _go_.8  _obj/life.cgo1.go _obj/_cgo_gotypes.go
8c -FVw -I ${GOROOT}/pkg/linux_386 -I . -o "_cgo_defun.8" _obj/_cgo_defun.c
gcc -m32 -I . -g -fPIC -O2 -o _cgo_main.o -c   _obj/_cgo_main.c
gcc -m32 -g -fPIC -O2 -o c-life.o -c   c-life.c
gcc -m32 -I . -g -fPIC -O2 -o life.cgo2.o -c   _obj/life.cgo2.c
gcc -m32 -I . -g -fPIC -O2 -o _cgo_export.o -c   _obj/_cgo_export.c
gcc -m32 -g -fPIC -O2 -o _cgo1_.o _cgo_main.o c-life.o life.cgo2.o _cgo_export.o  
cgo -dynimport _cgo1_.o >_obj/_cgo_import.c_ && mv -f _obj/_cgo_import.c_ _obj/_cgo_import.c
8c -FVw -I . -o "_cgo_import.8" _obj/_cgo_import.c
rm -f _obj/life.a
gopack grc _obj/life.a _go_.8  _cgo_defun.8 _cgo_import.8 c-life.o  life.cgo2.o _cgo_export.o

cgo -- life.go行创建以下文件:

_obj/_cgo_.o
_obj/life.cgo1.go
_obj/life.cgo2.c
_obj/_cgo_gotypes.go
_obj/_cgo_defun.c
_obj/_cgo_main.c
_obj/_cgo_flags
_obj/_cgo_export.c
_cgo_export.h

答案 1 :(得分:1)

我使用自定义构建工具来编译项目,我需要一种在项目中使用cgo的方法。

......这种方法会导致问题。使用Makefile的标准方法简单,容易,经过验证,记录等等。

我意识到我不是(直接)回答你的问题。相反,我的“回答”是:我强烈建议使用标准方式。不要通过选择其他而非直接支持的选项为自己创造问题。

那就是说,我认为有一种方法可以避免Makefiles,我从来没有去过那里,抱歉。我通常懒惰/缺乏时间,所以我用最简单/最快的方式完成任务。您可能想尝试相同的操作; - )