makefiles-一次编译所有c文件

makefiles-一次编译所有c文件,c,makefile,C,Makefile,我想尝试GCC的整个程序优化。为此,我必须一次性将所有C文件传递给编译器前端。然而,我使用makefiles来自动化我的构建过程,而对于MakefileMagic,我不是专家 如果我只想使用一个对GCC的调用来编译(甚至链接),我应该如何修改makefile 仅供参考-我的makefile如下所示: LIBS = -lkernel32 -luser32 -lgdi32 -lopengl32 CFLAGS = -Wall OBJ = 64bitmath.o \ monoton

我想尝试GCC的整个程序优化。为此,我必须一次性将所有C文件传递给编译器前端。然而,我使用makefiles来自动化我的构建过程,而对于MakefileMagic,我不是专家

如果我只想使用一个对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

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)
LIBS=-lkernel32-luser32-lgdi32-lopengl32
CFLAGS=-Wall
OBJ=64bitmath.o\
单调的\
node_sort.o\
飞机清扫\
三角测量\
prim_combine.o\
焊接\
测试\
梅因
%.o:%.c
gcc-c$(CFLAGS)$<-o$@
测试:$(OBJ)
gcc-o$@$^$(CFLAGS)$(LIBS)

您需要删除后缀规则(%.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

%.o : %.c
    gcc -c $(CFLAGS) $< -o $@

test: $(OBJ)
    gcc -o $@ $^ $(CFLAGS) $(LIBS)
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中添加了适当的标志

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

为什么它应该是实际的C文件列表而不是通配符?@nornagon,s/should是/应该相当于/@AlexB Speak English。这到底是什么意思?@Overv它是
sed
语法,意思是用“应该”替换“应该”相当于“这个makefile在此时被解释为实际上不是对原始问题的回答,因为它可能会多次调用
${CC}
。也就是说,这基本上就是我想要做的事情。(我想对一堆文本文件进行转换,所以我添加了自己的
。后缀
行等等,但是
$(通配符)
$(变量:.ext1=.ext2)
转换正是我想要的。),尽管我认为这值得对这个问题投反对票是有争议的。