2010-06-14 69 views
4

是否有make中的機制允許默認的全局隱式規則在任何地方都可用,類似於內置規則?Make中的默認規則

Make爲編譯C/C++/Fortran文件提供了一些內置的隱式規則,對於簡單的情況甚至不需要Makefile。但是,編譯其他語言時(例如Go編程語言文件),總是需要Makefile。我想擴展我的Makeenvironment以默認提供隱式規則。

回答

6

這通常不是可取的,因爲它會導致你的Makefile的便攜性降低;如果他們沒有這樣設置,它不會在別人的機器上工作。

但是,如果您想要這樣做,請在您的默認Go文件規則的某個位置創建一個「全局」Makefile,然後將其路徑添加到MAKEFILES環境變量中。當你運行「make」時,這個全局Makefile將在任何Makefile之前被處理,就像你已經將它的源代碼放在文件的頂部一樣。

+1

謝謝!同意你的謹慎。但是,我想編寫一次性拋棄代碼,而不必一直編寫Makefiles。 – notnoop 2010-06-14 15:11:36

3

我假設你指的是事實,你可以做

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,那麼這可能是推薦

3

雖然我同意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 +大寫鄰 - 不是零!)

雖然我沒有測試它在所有的機器我都可以,我相信它應該端口相當好。

+0

啊,甚至更簡單:http://github.com/jlouis/go-blip/blob/master/Makefile(雖然沒有測試過......) – 2010-09-06 10:15:16