我编写了简单的代码 *make_test* 来测试 makefile 的功能。文件夹结构如下:
包含文件夹包含maths.h
float add(float a, float b) { return a+b; }
主文件包含以下代码:
# include <stdio.h> # include <include/maths.h> int main(int argc, char** argv) { float a=1; float b=4; printf("%f + %f = %f\n", a, b, add(a, b)); return 0; }
makefile 包含以下内容:
IDIR = -I. DEPS = ./include/maths.h CC= gcc -Wall -g $(IDIR) program: make_test.o %.o: test/%.c $(DEPS) @echo "Rule 1 was called" $(CC) -o $@ $< %.o: test/%.c $(DEPS) @echo "Rule 2 was called" $(CC) -o $@ $< %.o: test/%.c $(DEPS) @echo "Rule 3 was called" $(CC) -o $@ $<
请注意,有故意插入的 test/%.c 语句用于测试。没有测试文件夹。如果我在主文件中进行更改并在命令行上键入 make,我会得到
gcc -Wall -g -I. -c -o make_test.o make_test.c
我的问题是我没有在任何地方添加 -c 标志,那么为什么它会出现在输出中?不应该有一个“无事可做”的输出,因为不存在依赖关系(test/%.c)或改变(include/maths.h)?
谢谢,