不产生输出

时间:2016-01-27 17:46:47

标签: c makefile 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不是我的实际文件名。

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

现在他检查,最后修改了什么,11.c?我甚至没有1,因此我将使用1等创建目标文件gcc 1.c -o 1

下次,如果你有1个文件并且修改了1.c,他会看到11.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/

相关问题