2010-11-07 56 views
0

我正在嘗試make一個makefile來編譯子文件夾中的各種示例。由以下組成的makefile:GNU不識別%

S_1_2.exe : Twister.cpp Parsing.cpp ./Surfaces/S_1_2.cpp 
    g++ -o [email protected] $^ -I . -W -Wall 

使用命令「make S_1_2.exe」運行時可以正常工作。但是:

%S_1_2.exe : Twister.cpp Parsing.cpp ./Surfaces/S_1_2.cpp 
    g++ -o [email protected] $^ -I . -W -Wall 

失敗,即使與命令運行make S_1_2.exe,出現錯誤 「令:*沒有規則,使目標的S_1_2.exe'停止。」

不應該%S_1_2.exe模式匹配,所以匹配S_1_2.exe?在這種情況下,爲什麼它不符合這個規則?

我正在使用GNU Make 3.81

+0

你確定這三個源文件存在嗎? – Beta 2010-11-07 15:36:59

+0

是的,它們都存在。就像我說的第一個命令運行良好,並具有完全相同的依賴關係。 – 2010-11-07 15:43:25

+0

我正在運行GNUMake 3.81,並且'%S_1_2.exe'出現同樣的錯誤,但是使用'%_1_2.exe',只有其中一個源丟失時纔會出現錯誤。 – Beta 2010-11-07 19:33:21

回答

1

百分比符號與非空字符串匹配。所以你應該使用%_1_2.exe或更好 - %.exe。我不知道是否還有其他符合空字符串的符號。

+0

即使使用%_1_2.exe或%.exe,我仍然會遇到同樣的問題 – 2010-11-07 14:53:40

1

%用於將目標的一部分與一個或多個依賴關係中的同一部分進行匹配。 您不能從所有依賴項中忽略它。