您的makefile不包含實際目標。您只定義了一個模式規則,告訴如何構建匹配模式的目標。但是make並不會在文件系統上尋找可以匹配模式的目標,它只會針對特定請求的目標檢查模式。
您的makefile中沒有列出任何特定目標(文件),因此唯一可以瞭解目標的方法是如果您在目標線上構建目標。
您正在使用%
特殊令牌從vim內運行此命令,該令牌展開爲當前正在編輯的文件的名稱。這意味着您正在運行命令:
make test1.cob
因爲您正在編輯文件test1.cob
。所以,你告訴make「請嘗試創建目標(文件)test1.cob
」。但是,該文件已經存在(這是您正在編寫的文件)。所以說,「無事可做」。
如果你運行make,並要求它來創建你真的想要創建的目標,它會工作:
現在文件test1
不存在,並可以找到一個知道如何圖案規則建立它,所以使得將運行該規則。
或者,你可以編輯你的Makefile添加的特定目標,如:
COBCWARN = -W
test1: test1.cob
%: %.cob
cobc $(COBCWARN) -free -x $^ -o [email protected]
然後你就可以運行在所有make
不帶參數。沒有任何命令行參數,make會在makefile中查找顯式目標,並將test1
作爲第一個。它看到有一個與該目標相匹配的規則(模式規則),所以它會構建該目標。
UPDATE
如果你想允許一個簡單的命令make
建立多個程序,寫你的makefile是這樣的:
COBCWARN = -W
all: test1 test2 test3
.PHONY: all
%: %.cob
cobc $(COBCWARN) -free -x $^ -o [email protected]
現在從VIM,你就可以說:!make
,就是這樣。
如果您運行make
沒有參數,那麼它會在makefile中找到第一個顯式目標並構建它。在這個例子中,第一個目標是all
,它的先決條件是可能的程序。構建每一個make都會看到它可以應用模式規則,所以它會這樣做(如果.cob
文件自上次構建該程序以來已被修改)。
你運行什麼命令來調用make?上面的makefile不完整:它本身不會執行任何操作。 – MadScientist 2014-12-06 14:12:44
@MadScientist:我正在使用Vim。我正在使用':make%'來編譯。我應該將哪些內容放入makefile才能使其工作? – Joydeep 2014-12-06 15:30:30