如何使这个Makefile更简洁?

时间:2010-05-18 08:42:12

标签: makefile

我知道有一些方法可以删除Makefile中的重复项$(CC) $(CFLAGS) $@ $^。你能告诉我如何使下面的Makefile更简洁吗?

CC=gcc
CFLAGS=-pthread -g -o

all: p1 p2

p1: p1.c
    $(CC) $(CFLAGS) $@ $^

p2: p2.c
    $(CC) $(CFLAGS) $@ $^

2 个答案:

答案 0 :(得分:2)

为了使您的Makefile更简洁,您可以按如下方式编写它。

CC=gcc
CFLAGS=-pthread -g -o

all: p1 p2

%: %.c
    $(CC) $(CFLAGS) $@ $^

然后,您可以在all:行添加任意数量的p。只要你提供pN.c,make就会把它们编译成相应的pN。

答案 1 :(得分:1)

是的,您可以“按先决条件”组合命令。例如:

CC=gcc
CFLAGS=-O3
INCLS=-I$(BASEDIR)/include
LIBS=$(BASEDIR)/lib/thread.a
OBJS = dotprod_mutex.o dotprod_serial.o
EXEC = dotprod

$(EXEC): $(OBJS)
         $(CC) -o $(EXEC) $(OBJS) $(LIBS)
$(OBJS): dotprod.h
         $(CC) $(CFLAGS) $(INCLS) -c $*.c

或某些 - 你需要仔细检查细节并确保这些库等实际上有意义。

请注意,短语$(OBJS): dotprod.h表示$(OBJS):取决于dotprod.h的存在。

您需要阅读手册以获取所有血腥细节,特别是:

至于自动化这些东西的工具,你需要automake和autoconf:http://sourceware.org/autobook/