Makefile中有几条遗憾的默认的常用规则:
- C语言源文件后缀名为.c,编译生成的目标文件后缀名为.o。
- CFLAGS用于控制编译时的编译参数。
- 对于依赖文件中的目标文件,如果没有写明规则make会进行自动推导。
基于以上原则,如果目标文件中有一个source.o的文件没有在makefile中写明规则,将会进行以下处理:
$(CC) –c source.c $(CPPFLAGS) $(CCFLAGS)
测试:
编写如下makefile:
编译执行:
通过以上例子可以看到,关于foo.o以及bar.o的生成规则makefile文件中并没有写明,但是通过make分析makefile进行编译的时候上述文件头得到了正常的编译。这边一隐性规则自动推导的一种表现。