2017-07-31 73 views
0

我喜歡從perlscript創建一個ch文件。所以我創建了以下規則:makefile創建來自perlscript的c和h文件

abc.[ch]: 
    @perl makestrings abc 

我得到這個錯誤信息:

File `abc.h' does not exist. 

當我使用的規則abc.h:它會奏效。 我想我有一個問題,c文件不包括在內。所以我需要重新啓動時,創建abc.habc.c

+0

'perl makestrings abc'是否正常工作?用簡單的腳本對我來說效果很好。 – uzsolt

+0

是的,劇本運作良好。創建'abc.h'和'abc.c'。但是,如果make嘗試編譯'abc.o',它會失敗,因爲雖然它是由腳本創建的,但找不到abc.c。它似乎使coudln't找到它擺在首位。 – Chris

+0

啊,理解。你沒有說你想從'abc.c'和'abc.h'創建'abc.o'。看到我的答案! – uzsolt

回答

0

abc.[ch]abc.cabc.h的通配符。但它是一個通配符,也就是說,如果文件不存在,它會擴展爲字符串abc.[ch](不是你想要的)。如果只有一個存在,它會擴展爲這個(不是你想要的)。你可以嘗試這樣的:

.PHONY: abc_ch 
abc_ch: abc.c abc.h 

abc.c abc.h: 
    @perl makestrings abc 
+0

'make中的通配符是'*','?'和'[...]',與Bourne shell相同。「請參閱:https://www.gnu.org/software/make/manual/html_node /Wildcards.html#Wildcards – uzsolt

+0

有趣的是,我不知道,謝謝。相應地編輯我的答案。 –

+0

爲什麼需要'abc_ch'規則? – Beta

0

Makefile是正確的,但你應該添加一個加規則。

abc.o: abc.c abc.h 
    ${CC} -o abc.o abc.c 

在這種情況下abc.o需要abc.cabc.h也因此make將創建abc.cabc.h第一和之後嘗試建立abc.o

A plus建議:我會添加一個依賴abc.[ch]makestrings perl腳本。也可能是makestrings使用的其他文件。

+0

我的include makefile中有一條規則:'makefile.cpu':'$(OBJECTDIR)/%。o:%.c | $(OBJECTDIR)',我認爲這是令人興奮的。所以我認爲它不應該是必要的? – Chris

+0

但是我看不到'%.h'(在'makefile.cpu'中:))我的版本也包含'%.h'。 – uzsolt

+0

聲音正確。但是我做了一個'make clean'並複製了'abc.c',以便在開始make之前創建文件。一切正常。我找不到邏輯失敗。 – Chris