一些建议(假设您使用 GNU make,而不是其他)
首先,运行一次make -p,您将了解make 所知道的内置规则。特别注意COMPILE.c和LINK.c
那么,我建议
CFLAGS= -g -Wall -I.
(因为您确实希望 -g 进行调试,而 -Wall 获得大多数警告)
你可能不需要
$(EXECUTABLE): $(OBJ)
gcc -o $@ $^ $(CFLAGS)
不过,我建议在大多数其他规则之前添加
.PHONY: all clean
all: $(EXECUTABLES)
实际上,我会将您的Makefile(对于 GNU make!)编码如下
# file Makefile
CC= gcc
RM= rm -vf
CFLAGS= -Wall -g
CPPFLAGS= -I.
SRCFILES= ex1.c ex2.c ## or perhaps $(wildcard *.c)
OBJFILES= $(patsubst %.c, %.o, $(SRCFILES))
PROGFILES= $(patsubst %.c, %, $(SRCFILES))
.PHONY: all clean
all: $(PROGFILES)
clean:
$(RM) $(OBJFILES) $(PROGFILES) *~
## eof Makefile
请记住,tab 是Makefile-s 中的重要字符(rules 的操作部分)。在这个答案中,至少以四个空格开头的行应该真正以 tab 字符开头。
调试完所有内容后,考虑运行make clean 清理所有内容,然后运行make -j CFLAGS=-O2 all 并行编译所有内容并进行优化。
最后,我推荐使用remake并运行remake -x来调试复杂的Makefile-s
当然,我假设你的目录只有单文件程序。
顺便说一句,还有其他 build automation 工具。也许您可以考虑使用omake 或ninja。对于构建大型程序(数百万行源代码行),还可以考虑automake、ccache、cmake、icecream。在某些情况下,考虑使用GPP、GNU bison、SWIG 等...或使用您自己的Python 或Guile 脚本(或C 元程序)生成一些C 代码。另请参阅this draft 报告。
不要忘记为您的源文件使用像git 这样的版本控制系统。也是时候学习这样的工具了。