2010-11-07 58 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

%用于将目标的一部分与一个或多个依赖关系中的同一部分进行匹配。 您不能从所有依赖项中忽略它。