makefile会产生奇怪的错误

时间:2016-12-02 11:40:15

标签: c linux makefile

所以我编写了一个计算Caesar密码的程序,但我认为这并不重要 - 当我尝试make编译器或检查编译器的语法时,问题是什么?我的makefile抛出错误说:

  

制作:***没有规定让目标'干净。'需要' PHONY'。停止。

在我的目录中,我有5个文件:

main.c
ceasar.c
ceasar.h
parser.c
parser.h

和makefile看起来像:

PHONY : all clean.
CFLAGS = -c -g -Wall
CXXFLAGS = -o
CC = gcc
OBJECTS = main.o ceasar.o parser.o
EXTRA_SRCS = ceasear.h parser.h

all : ex1

ex1 : $(objects)
    $(CC) $(CXXFLAGS) ex1 $(objects)
%.o : %.c $(wildcard $(EXTRA_SRCS))
    $(CC) $(CFLAGS) $<

clean:  
    rm *.o

makefile应该在键入make clean时清理对象文件 并且行$(wildcard $(EXTRA_SRCS))应该检查c文件是否有头文件(解析器和caeser,而不是main)。 我使用的是ubuntu 15.10,请帮助我:)

1 个答案:

答案 0 :(得分:1)

可以指定虚拟目标,其目的是执行一系列操作。这些目标不指定任何依赖关系,并且不得作为第一个规则出现,只有当它们作为参数显式传递给make命令时才能执行。虚构目标不是文件(文件不存在),它用于在每种情况下启动命令的执行。

CFLAGS = -c -g -Wall
CXXFLAGS = -o
CC = gcc
OBJECTS = main.o ceasar.o parser.o
EXTRA_SRCS = ceasear.h parser.h

all : ex1

ex1 : $(objects)
$(CC) $(CXXFLAGS) ex1 $(objects)
%.o : %.c $(wildcard $(EXTRA_SRCS))
$(CC) $(CFLAGS) $<

.PHONY: clean

clean: rm *.o

小心因为虚构目标可能被现有文件掩盖:如果在目录中意外地创建了一个名为虚构目标名称的文件,那么目标没有依赖关系,并且该文件已存在,该文件不需要更新,然后命令列表将永远不会被执行。