下面是我的makefile:
TARGET = prog
LIBS = -lm
CC = gcc
CFLAGS = -pthread -Wextra -Wall -Wundef -Wshadow -Wpointer-arith -Wcast-align -Wstrict-prototypes -Wwrite-strings -Waggregate-return -Wcast-qual -Wswitch-default -Wswitch-enum -Wconversion -Wunreachable-code
.PHONY: clean all default
default: $(TARGET) clean
all: default
OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c))
HEADERS = $(wildcard *.h)
%.o: %.c $(HEADERS)
$(CC) $(CFLAGS) -c $< -o $@
.PRECIOUS: $(TARGET) $(OBJECTS)
$(TARGET): $(OBJECTS)
$(CC) $(OBJECTS) -Wall $(LIBS) -o $@
clean:
-rm -f *.o
通过上面的标志和目录中的几个文件,输出使查找警告变得极为困难:
如何在每次致电GCC之间获得换行符?也许得到更多警告呢?
您可以使命令本身静音,并用更短的内容替换它。
CPPFLAGS := -MMD -MP
CFLAGS := -pthread -Wextra -Wall -Wundef -Wshadow -Wpointer-arith -Wcast-align -Wstrict-prototypes -Wwrite-strings -Waggregate-return -Wcast-qual -Wswitch-default -Wswitch-enum -Wconversion -Wunreachable-code
LDLIBS := -lm
objects := $(patsubst %.c, %.o, $(wildcard *.c))
deps := $(objects:.o=.d)
.PHONY: all clean
prog: $(objects)
$(LINK.o) $^ $(LDLIBS) -o $@
%.o: %.c
@echo Compiling $<
@$(COMPILE.c) -o $@ $<
clean: ; $(RM) $(objects) $(deps)
-include $(deps)
其他一些事情:
:=
到=
LDLIBS
是make的内置配方中使用的库的标准变量CC
为cc
,这应该是默认编译器的链接,通常不需要设置CC
default
目标将破坏并行构建(-j
),我不会为它打扰all
规则,只需将目标作为第一条规则wildcard
和来源,手动指定它们通常更安全-MMD -MP
,include
)$(RM)
设为默认rm -f
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句