我正在尝试创建一个makefile来编译子文件夹中的各种示例。 makefile只包含:
S_1_2.exe : Twister.cpp Parsing.cpp ./Surfaces/S_1_2.cpp
g++ -o $@.exe $^ -I . -W -Wall
使用命令“make S_1_2.exe”运行时工作正常。但是:
%S_1_2.exe : Twister.cpp Parsing.cpp ./Surfaces/S_1_2.cpp
g++ -o $@.exe $^ -I . -W -Wall
失败,即使使用命令make S_1_2.exe运行,也会出现错误“make: * 没有规则使目标'S_1_2.exe'。停止。”
不应该%S_1_2.exe进行模式匹配,因此匹配S_1_2.exe?在哪种情况下,为什么它不符合这条规则?
我正在使用GNU Make 3.81
答案 0 :(得分:1)
百分比符号与非空字符串匹配。因此,您应该使用%_1_2.exe
或更好 - %.exe
。我不知道是否还有其他符号与空字符串匹配。
答案 1 :(得分:1)
%
用于将目标的一部分与一个或多个依赖项中的相同部分进行匹配。
你不能在所有依赖项中省略它。