所以我编写了一个计算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,请帮助我:)
答案 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
小心因为虚构目标可能被现有文件掩盖:如果在目录中意外地创建了一个名为虚构目标名称的文件,那么目标没有依赖关系,并且该文件已存在,该文件不需要更新,然后命令列表将永远不会被执行。