是否有make中的機制允許默認的全局隱式規則在任何地方都可用,類似於內置規則?Make中的默認規則
Make爲編譯C/C++/Fortran文件提供了一些內置的隱式規則,對於簡單的情況甚至不需要Makefile
。但是,編譯其他語言時(例如Go編程語言文件),總是需要Makefile
。我想擴展我的Makeenvironment以默認提供隱式規則。
是否有make中的機制允許默認的全局隱式規則在任何地方都可用,類似於內置規則?Make中的默認規則
Make爲編譯C/C++/Fortran文件提供了一些內置的隱式規則,對於簡單的情況甚至不需要Makefile
。但是,編譯其他語言時(例如Go編程語言文件),總是需要Makefile
。我想擴展我的Makeenvironment以默認提供隱式規則。
這通常不是可取的,因爲它會導致你的Makefile的便攜性降低;如果他們沒有這樣設置,它不會在別人的機器上工作。
但是,如果您想要這樣做,請在您的默認Go文件規則的某個位置創建一個「全局」Makefile,然後將其路徑添加到MAKEFILES環境變量中。當你運行「make」時,這個全局Makefile將在任何Makefile之前被處理,就像你已經將它的源代碼放在文件的頂部一樣。
我假設你指的是事實,你可以做
make hello.o
,並會自動知道如何使從.c
文件.o
(或者甚至是有.f
或.p
,如果存在的話) - 但你要對自定義文件類型做到這一點(比如,從一個.foo
建設.bar
這樣做如下(在Makefile的最簡便的方式。):
.SUFFIXES: .foo .bar
.foo.bar:
foo2bar -in $> -out [email protected]
第一行(.SUFFIXES
)警告說您會將這些視爲特殊後綴;第二行寫着「這裏是從一個.foo
作出.bar
配方的第三行給出了這樣的命令 - $>
和[email protected]
獲得通過化妝改變輸入和輸出文件名
注意:爲縮進第三行必須是製表符:
一個更靈活的方法,只適用於GNU make,就是使用它對implicit rules的支持。如果你能保證你將使用GNU make,那麼這可能是推薦
雖然我同意dmazzoni,但我只是想添加我的製作配方Go Makefile
:
# Include default Golang Make magic
include $(GOROOT)/src/Make.$(GOARCH)
# Hack the following line
your_program: your_program.$O
$(LD) -o [email protected] $^
# Compiles .go-files into architecture-specific binaries
%.$O: %.go
$(GC) -o [email protected] $^
clean:
rm your_program *.$O
(注:$O
是DOLLAR +大寫鄰 - 不是零!)
雖然我沒有測試它在所有的機器我都可以,我相信它應該端口相當好。
啊,甚至更簡單:http://github.com/jlouis/go-blip/blob/master/Makefile(雖然沒有測試過......) – 2010-09-06 10:15:16
謝謝!同意你的謹慎。但是,我想編寫一次性拋棄代碼,而不必一直編寫Makefiles。 – notnoop 2010-06-14 15:11:36