2011-03-01 119 views
8

在使用的GNU-make,我的Makefile有一些模式規則:Makefile模式規則失敗?

%.o:%.c 
    gcc $< -o:[email protected] 

此規則由我添加。

但是,當我做它會給出一個錯誤說沒有規則,使目標%.o,並不建立目標。

有時,還有其他的行爲。當我說第一次做make時它沒有建立目標(它給出錯誤說沒有規則做目標),但是當我說再次make時,它確實建立了。

因此,當我明確指定每個源文件分開,然後它自己建立目標罰款第一次。

編輯:我在Centos上使用GNU-make(v6.3我猜,不知道)。這可能是一些權限/用戶ID /組ID問題?

任何指標瞭解可能發生的事情和解決方案?

謝謝, -AD。

+0

這裏有完全相同的問題。上帝,我創造了文件,​​他們的愚蠢語法和任意限制。 – antred

回答

2

您可能需要在規則第一行的:周圍有空格。另外,gcc不會在輸出文件名之前冒號;只需使用-o [email protected]即可。

+0

@Ok這些是我的錯別字。 Makefile沒有任何錯誤。仍然問題仍然存在.. – goldenmean

+0

你可以嘗試'make -d'在你的目標上嗎?它發出了很多輸出,但你可以看到它正在嘗試什麼規則,也許看到了什麼錯誤。如果您認爲這有助於診斷問題,您也可以發佈結果。 –

12

僅使用模式規則作爲一種回退。例如:

$ ls 
Makefile 
$ cat Makefile 
%.o: %.c 
    gcc $< -o [email protected] 
$ make 
make: *** No targets. Stop. 

這很好。 Make不考慮模式規則,因爲您沒有要求它做任何事情,並且makefile中沒有默認目標。讓我們要求它做一些可能使用模式規則的東西。

$ make 1.o 
make: *** No rule to make target `1.o'. Stop. 

預計。 1.c不存在,所以不考慮模式規則。讓我們再試一次。

$ touch 1.c 
$ make 1.o 
gcc 1.c -o 1.o 

(然後有一些關於main被丟失的錯誤)。

我個人很不喜歡這些備用規則。我更願意明確列出目標。類似於

file.o file2.o f.o: %.o: %.c 
    ... 

爲您提供了目標特定模式規則。這些完全不同(參見手冊)。 [噢,這個模式並沒有給你帶來好處。]

0

剛剛遇到了這個問題。

如果這是您的規則:

%.o:%.c 
    gcc $< -o:[email protected] 

請確保您有一個標籤,而不是在之前的GCC第二行的空間。花了我幾個小時弄清楚。 也不是':'在-o標誌之後,正如其他人指出的那樣。

0

確定.c文件存在嗎?我認爲使用前面建議的-d應該有助於調試。