【发布时间】:2011-12-10 13:15:48
【问题描述】:
我一直在努力让 make 只编译已编辑的文件。但是我没有取得太大的成功,所有文件都被重新编译。谁能解释一下为什么?
我的文件是:
main.c
a_functions.c
其中 main.c 包括 main.h a_functions.c 包括 a.h
这是我的生成文件:
CC=gcc
CFLAGS=-Wall -I. -c
EXEC_FILE=program1
all: program
a_functions.o: a_functions.c
a_functions.c: a.h
main.o: main.c
main.c: main.h
objects: a_functions.c main.c
$(CC) a_functions.c main.c $(CFLAGS)
program: a_functions.o main.o
$(CC) a_functions.o main.o -o $(EXEC_FILE)
根据建议更改makefile似乎有同样的问题::
all: program
a_functions.o: a_functions.c a.h
gcc a_functions.c -c
main.o: main.c main.h
gcc main.c -c
program: a_functions.o main.o
gcc a_functions.o main.o -o program1
【问题讨论】:
-
-I.让我觉得很奇怪。那是怎么回事? -
@sarnold:仅表示在当前目录中搜索包含文件以及实现定义的文件。是否需要它是有争议的,但我认为它不会造成任何伤害。
-
@paxdiablo,也许,但我猜这是另一个问题的症状。如果他的平台没有为某些东西提供系统范围的标头,而他必须提供自己的版本,那是一回事,但我猜这是一个错误......
-
@sarnold:这怎么可能是个错误?几乎可以肯定,在您想要编译的几乎所有程序中,当前目录中都需要包含头文件。
-
以使答案无效的方式更改问题不是一个好主意。随意扩充信息(请参阅我的编辑),否则 SO 变得不那么有用,因为答案与问题不匹配。