makefiles – 一次编译所有的c文件

我想尝试GCC整个程序的优化。 为此,我必须一次将所有的C文件传递给编译器前端。 然而,我使用makefile来自动化我的构build过程,而且在makefile魔术方面我不是专家。

如果我想使用一次调用GCC来编译(甚至可能是链接),我应该如何修改makefile?

作为参考 – 我的makefile看起来像这样:

LIBS = -lkernel32 -luser32 -lgdi32 -lopengl32 CFLAGS = -Wall OBJ = 64bitmath.o \ monotone.o \ node_sort.o \ planesweep.o \ triangulate.o \ prim_combine.o \ welding.o \ test.o \ main.o %.o : %.c gcc -c $(CFLAGS) $< -o $@ test: $(OBJ) gcc -o $@ $^ $(CFLAGS) $(LIBS) 
 LIBS = -lkernel32 -luser32 -lgdi32 -lopengl32 CFLAGS = -Wall # Should be equivalent to your list of C files, if you don't build selectively SRC=$(wildcard *.c) test: $(SRC) gcc -o $@ $^ $(CFLAGS) $(LIBS) 
 SRCS=$(wildcard *.c) OBJS=$(SRCS:.c=.o) all: $(OBJS) 

您需要取出您的后缀规则(%.o:%.c),以支持大爆炸规则。 像这样的东西:

 LIBS = -lkernel32 -luser32 -lgdi32 -lopengl32 CFLAGS = -Wall OBJ = 64bitmath.o \ monotone.o \ node_sort.o \ planesweep.o \ triangulate.o \ prim_combine.o \ welding.o \ test.o \ main.o SRCS = $(OBJ:%.o=%.c) test: $(SRCS) gcc -o $@ $(CFLAGS) $(LIBS) $(SRCS) 

如果您要试验GCC的整个程序优化,请确保您在上面添加适当的标志到CFLAGS。

在阅读这些标志的文档时,我也看到了关于链接时间优化的注释; 你也应该调查一下。