2011-06-03 39 views
1

我做了如下的makefile(我在使用Visual Studio的命令行編譯器窗口)的Makefile乾淨的,我瞭解,現在使用的makefile和Windows

CC = cl 
CFLAG = /EHsc 
test_database.exe: composer.obj database.obj test_database.obj 
    $(CC) test_database.obj database.obj composer.obj 
test_database.obj: test_database.cpp 
    $(CC) $(CFLAGS) -c test_database.cpp 
composer.obj: composer.cpp composer.h 
    $(CC) $(CFLAGS) -c composer.cpp 
database.obj: database.cpp database.h 
    $(CC) $(CFLAGS) -c database.cpp 

.PHONY : clean 
clean: 
    rm -f *.obj 

每當我調用make clean我得到make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4ff283) 我我不太確定我做錯了什麼。我可以使用make來編譯程序沒有問題當我定位乾淨時,我只是得到錯誤。我的機器上存在rm,並且隨時都在使用它。我試過DEL以及相同的錯誤。任何幫助指出我在正確的方向將不勝感激。

製作版本是GNU Make 3.80

+1

好吧,你似乎在GNU Makefile知識中應用了Nmake,假設你在命令行中使用'make'調用Nmake,而不是構建GNU make for Windows。你在第2行有一個拼寫錯誤('CFLAG'應該是'CFLAGS'),但除此之外,它應該是刪除Nmake不支持的.PHONY指令並將'rm -f'更改爲' del/f/q'。 – 2011-06-03 02:32:29

+0

'make --version'給了我'GNU Make 3.80',感謝您注意到了拼寫錯誤,但這只是編譯器的錯誤處理選項,與clean無關。我已經在這裏做了假,並省略了。 – ameer 2011-06-03 02:47:31

+0

這是什麼版本的'make'? 'make --version'應該告訴你。 'make -p clean'也可能有幫助。 – 2011-06-03 02:48:14

回答

2

你生成文件是好的,「NMAKE乾淨」正確地調用命令。

使您使用的版本無法正常工作。您的選擇是使用Visual Studio或Windows SDK附帶的nmake.exe實用程序或獲取可用的make版本。

+1

但我可以使用'make'工具編譯就好了,整個make不壞或不可用,我的問題只是關係到當我「乾淨」時拋出的錯誤,而我只是在清理時纔會出現這個錯誤。感謝關於使用nmake的提示,但我仍然想知道爲什麼使清潔失敗。 – ameer 2011-06-03 02:51:57

+0

由於GNU make(作爲msys的一部分)調用rm命令的方式,它看起來像make clean失敗。即使rm自行運行,它在從make運行時也不起作用。如果你使用nmake,那麼rm會起作用,但你可能遇到nmake和make之間的其他區別,這可能會破壞你的makefile。 – oenpelli 2014-10-22 05:19:14

1

最近,我面臨同樣的問題。在我看來,轉義星號(即rm -rf \*.obj)解決了這個問題。雖然我的製作版本有點新:GNU Make 3.81