特殊的宏
在运行任何目标集(target rule set)中的指令之前,有一些预定义的特殊宏 -
$@ 要创建的文件的名称。
$? 是被更改的对应文件名。
例如,在下列场景中我们可以使用如下规则:
hello: main.cpp hello.cpp factorial.cpp
$(CC) $(CFLAGS) $? $(LDFLAGS) -o $@
或者 −
hello: main.cpp hello.cpp factorial.cpp
$(CC) $(CFLAGS) $@.cpp $(LDFLAGS) -o $@
在这个例子中,像 $(CC) $(CFLAGS) $? $(LDFLAGS) -o $@ 这样的操作行应该在行首输入一个制表符 (\t) ,否则 make 会报错。 其中的 $@ 代表 hello 同时 $? 或者 $@.cpp 则代表所有已修改源文件。
同时默认规则中还有另外两个特殊的宏。他们分别是 -
$< 触发操作的相关文件的名称。
$* 由目标文件和依赖文件共享的前缀。
常见的隐式规则是用于构建 .cpp(源文件)之外的 .o(对象)文件。
.cpp.o:
$(CC) $(CFLAGS) -c $<
或者 −
.cpp.o:
$(CC) $(CFLAGS) -c $*.c