一些建议(假设您使用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是 -s 中的一个重要字符(规则Makefile
的操作部分)。在这个答案中,至少以四个空格开头的行应该真正以一个字符开头。tab
调试完所有内容后,请考虑运行make clean
以清理所有内容,然后make -j CFLAGS=-O2 all
通过优化并行编译所有内容。
最后,我推荐使用remake
并运行remake -x
来调试复杂的Makefile
-s
当然,我假设您的目录只有单文件程序。
顺便说一句,还有其他构建自动化工具。也许您可以考虑使用omake或ninja。对于构建大型程序(数百万行源代码行),还要考虑automake、ccache、cmake、icecream。在某些情况下,考虑使用GPP、GNU bison、SWIG等生成一些 C 代码……或使用您自己的Python或Guile脚本(或 C 元程序)。另见本报告草稿。
不要忘记对源文件使用git 之类的版本控制系统。现在也是学习这种工具的时候了。