Да, вы можете комбинировать команды «по предварительным условиям». Например:
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/