Как сделать этот Makefile более лаконичным? - PullRequest
0 голосов
/ 18 мая 2010

Я знаю, что есть способы удалить дубликаты $(CC) $(CFLAGS) $@ $^ в Makefile. Можете ли вы сказать мне, как сделать Makefile ниже более кратким?

CC=gcc
CFLAGS=-pthread -g -o

all: p1 p2

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

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

Ответы [ 2 ]

2 голосов
/ 18 мая 2010

Чтобы сделать ваш Makefile более кратким, вы можете написать его следующим образом.

CC=gcc
CFLAGS=-pthread -g -o

all: p1 p2

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

Затем вы можете добавить столько строчек, сколько хотите, в строку all:. Пока вы предоставляете pN.c, make скомпилирует их в соответствующий pN.

1 голос
/ 18 мая 2010

Да, вы можете комбинировать команды «по предварительным условиям». Например:

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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...