使不产生输出

Make not producing output

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 不是我的实际文件名。

对于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
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

make 如何知道要编译什么?他检查依赖项的最后修改时间!如果依赖文件在目标文件之后才修改,那么他就在做工作!

他检查 1 2 3 及其依赖项。 1 的依赖项是 1.c。而现在,如果在1之后修改1.c,他才会做gcc 1.c -o 1。由于在您的情况下 1 甚至不存在,Make 将为您创建此文件。

Target: all -> Dependencies: 1 2 3

Target: 1 -> Dependency: 1.c

Target: 2 -> Dependency: 2.c

Target: 3 -> Dependency: 3.c

现在他检查最后修改了什么,11.c?我什至没有 1,所以我将使用 gcc 1.c -o 1

创建目标文件 1

下次,如果您有 1 文件并修改了 1.c,他会看到文件 1 是在 1.c 上次修改之前创建的,因此他会再做一次 gcc 1.c -o 1.

你可以用这个..

# 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/