makefiles-在编译所有c文件

我想尝试GCC整个程序的优化。 为此,我必须一次将所有C文件传递到编译器前端。 但是,我使用makefiles来自动化构建过程,并且在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)
Nils Pipenbrinck asked 2019-11-07T08:27:06Z
3个解决方案
58 votes
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)
Alex B answered 2019-11-07T08:27:15Z
42 votes
SRCS=$(wildcard *.c)

OBJS=$(SRCS:.c=.o)

all: $(OBJS)
Manas answered 2019-11-07T08:27:32Z
1 votes

您需要删除后缀规则(%.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中添加了适当的标志。

阅读文档中的这些标志时,我会看到有关链接时间的注释优化以及 您也应该调查这些。

James McPherson answered 2019-11-07T08:28:09Z
translate from https://stackoverflow.com:/questions/170467/makefiles-compile-all-c-files-at-once