2011-10-19 13 views
0

我有一個使用模式匹配使用規則像這樣的自動編譯生成文件:是否可以匹配make文件中的集合?

%.o : %.c 
    gcc -c $< 

但是在這個項目中我有一些它在其延伸的情況下,不同的源文件。有沒有像在正則表達式中一樣匹配make文件中的集合的方法。

僞例如:

%.o : %.[cC] 
    gcc -c $< 

這是不可能簡單地改變,因爲這是用於一個現有的項目,從幾個其它混合模塊的模塊測試的源文件的情況下。

+1

看起來你的第二個例子是解決方案。你試過了嗎?它適用於GNU Make。 –

+0

似乎make會發出一個標準的構建命令,如果它找不到匹配的規則。如果向命令添加並回顯行,則會看到該規則未執行。 – Kenneth

+0

它適合我。也許它是GNU Make擴展。你使用什麼版本的產品? –

回答

1

我找到了解決方案。事實證明,makefile有幾個問題。

首先我發佈的例子實際上是Banthar指出的。但是我的問題是我的源文件不在根目錄中,而是在我添加到vpath的src /子目錄中。我真的認爲這與我的問題無關,因爲我相信make會自動掃描其源文件的vpath。結果vpath不適用於規則檢查。

要使其工作要做:

vpath = %.c src 
vpath = %.C src 

%o : src/%.[Cc] 
    gcc -c $< 

下一頁,因爲我是通過如何把它做化妝有時會建立在我背後sourcefiles實例工作。如果你這樣做:

all : main.o 
    gcc -o test main.o 

...並沒有規則來建立.o文件make將使用隱式的inbuild規則來構建它。非常混亂。它可以使用-r標誌禁用。使用gcc沒有任何額外的選項

make -r all 

三編譯.C文件將導致連接錯誤,因爲GCC解釋.C文件作爲C++文件作爲默認。爲了編譯爲C文件使用-x標誌。

%.o : %.C 
    gcc -x c -c %< 

希望這可以幫助別人。

0

我可以看到最簡單的方法是簡單地鏈接不匹配的情況:

%.c : %.C 
     ln $< [email protected] 

,讓規則鏈接做休息。

相關問題