【发布时间】:2019-05-14 13:04:57
【问题描述】:
当头文件改变时,我的 makefile 会重新编译所有内容,我怎样才能让它只重新编译需要的文件? a_functions.c 以 a.h 为例。
每当我更改 .c 文件时,makefile 只会将该文件重新编译为对象。
SHELL=/bin/sh
CC=gcc
CFLAGS=-Wall
OBJECTS=main.o a_functions.o b_functions.o c_functions.o d_functions.o
DEPS=main.h a.h b.h c.h d.h
PROGRAM_NAME=program1
INSTALL_PATH=/usr/local/bin
%.o: %.c $(DEPS)
$(CC) -c $(CFLAGS) $< -o $@
.PHONY: all
all: $(PROGRAM_NAME)
$(PROGRAM_NAME): $(OBJECTS)
$(CC) $(OBJECTS) -o $(PROGRAM_NAME)
.PHONY: install
install: $(PROGRAM_NAME)
install -c $(PROGRAM_NAME) $(INSTALL_PATH)/
.PHONY: uninstall
uninstall:
rm -v $(INSTALL_PATH)/$(PROGRAM_NAME)
.PHONY: clean
clean:
rm -v $(PROGRAM_NAME) *.o
如果我更改了下面的头文件
$ make
gcc -c -Wall main.c -o main.o
gcc -c -Wall a_functions.c -o a_functions.o
gcc -c -Wall b_functions.c -o b_functions.o
gcc -c -Wall c_functions.c -o c_functions.o
gcc -c -Wall d_functions.c -o d_functions.o
gcc main.o a_functions.o b_functions.o c_functions.o d_functions.o -o program1
当我更改 .c 文件时,会发生这种情况,这也是我想要的所有标题。
$ make
gcc -c -Wall a_functions.c -o a_functions.o
gcc main.o a_functions.o b_functions.o c_functions.o d_functions.o -o program1
希望它是这种方式是常见的做法吗?我将如何更改我的代码来解决问题?
【问题讨论】:
-
DEPS=main.h a.h b.h c.h d.h然后%.o: %.c $(DEPS)它给你任何线索吗?