我有一個使用模式匹配使用規則像這樣的自動編譯生成文件:是否可以匹配make文件中的集合?
%.o : %.c
gcc -c $<
但是在這個項目中我有一些它在其延伸的情況下,不同的源文件。有沒有像在正則表達式中一樣匹配make文件中的集合的方法。
僞例如:
%.o : %.[cC]
gcc -c $<
這是不可能簡單地改變,因爲這是用於一個現有的項目,從幾個其它混合模塊的模塊測試的源文件的情況下。
我有一個使用模式匹配使用規則像這樣的自動編譯生成文件:是否可以匹配make文件中的集合?
%.o : %.c
gcc -c $<
但是在這個項目中我有一些它在其延伸的情況下,不同的源文件。有沒有像在正則表達式中一樣匹配make文件中的集合的方法。
僞例如:
%.o : %.[cC]
gcc -c $<
這是不可能簡單地改變,因爲這是用於一個現有的項目,從幾個其它混合模塊的模塊測試的源文件的情況下。
我找到了解決方案。事實證明,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 %<
希望這可以幫助別人。
看起來你的第二個例子是解決方案。你試過了嗎?它適用於GNU Make。 –
似乎make會發出一個標準的構建命令,如果它找不到匹配的規則。如果向命令添加並回顯行,則會看到該規則未執行。 – Kenneth
它適合我。也許它是GNU Make擴展。你使用什麼版本的產品? –