all: 1.c 2.c 3.c
1.c:
gcc 1.c -o 1
2.c:
gcc 2.c -o 2
3.c:
gcc 3.c -o 3
所以当我输入“make”时,为什么没有生成文件(它只是告诉我“make”是最新的。)我做错了什么?!
请注意,1,2和3不是我的实际文件名。
答案 0 :(得分:1)
all: 1 2 3
1: 1.c
gcc 1.c -o 1
2: 2.c
gcc 2.c -o 2
3: 3.c
gcc 3.c -o 3
如何知道要编译什么?他检查上次修改的依赖时间!如果依赖文件仅在目标文件之后被修改,那么他就是在做这项工作!
他检查1 2 3
及其依赖关系。 1
的依赖关系为1.c
。现在,如果1.c
仅在1
之后修改,那么他将会gcc 1.c -o 1
。由于在您的情况下1
甚至不存在,因此Make将为您创建此文件。
目标:全部 - >依赖关系:1 2 3
目标:1 - >依赖性:1.c
目标:2 - >依赖性:2.c
目标:3 - >依赖性:3.c
现在他检查,最后修改了什么,1
或1.c
?我甚至没有1
,因此我将使用1
等创建目标文件gcc 1.c -o 1
。
下次,如果你有1
个文件并且修改了1.c
,他会看到1
在1.c
上次修改之前创建了gcc 1.c -o 1
,所以他会再做{{1}}。
答案 1 :(得分:0)
使用1.c:
定义构造对象“1.c”的规则,你需要说你正在构造对象“1”
1: 1.c
gcc 1.c -o 1
2: 2.c
gcc 2.c -o 2
3: 3.c
gcc 3.c -o 3
答案 2 :(得分:0)
你可以用这个..
# Makefile template
CC=gcc
CFLAGS= -I.
OBJ=1.o 2.o 3.o
DEPS= library1.h library2.h library3.h
all: X
@echo "Finish."
X: $(OBJ)
@echo "Building the application core.."
$(CC) -o x $(OBJ) $(CFLAGS)
%.o: %.c $(DEPS)
@echo "Building objects.."
$(CC) -c -o $@ $< $(CFLAGS)
clean:
@echo "Cleaning up.."
rm -f $(OBJ) x
<强> 来源: 强> http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/