makefile 正在跳过目标
makefile is skipping target
我有一个项目的以下 makefile:
VIEW := View
CONTROLLER := Controller
MODEL := Model
all: compilar
compilar: criterio acta persona director jurado asistente universidad view main
g++ -o Salida Criterio.o Acta.o Persona.o Director.o Jurado.o Asistente.o Universidad.o View.o main.o
criterio: ${MODEL}/Criterio.cpp ${MODEL}/Criterio.h
g++ -c ${MODEL}/Criterio.cpp
acta: ${MODEL}/Acta.cpp ${MODEL}/Acta.h ${MODEL}/Criterio.h
g++ -c ${MODEL}/Acta.cpp
persona: ${MODEL}/Persona.cpp ${MODEL}/Persona.h ${MODEL}/Acta.h
g++ -c ${MODEL}/Persona.cpp
director: ${MODEL}/Director.cpp ${MODEL}/Director.h ${MODEL}/Persona.h
g++ -c ${MODEL}/Director.cpp
jurado: ${MODEL}/Jurado.cpp ${MODEL}/Jurado.h ${MODEL}/Persona.h
g++ -c ${MODEL}/Jurado.cpp
asistente: ${MODEL}/Asistente.cpp ${MODEL}/Asistente.h ${MODEL}/Persona.h
g++ -c ${MODEL}/Asistente.cpp
universidad: ${MODEL}/Universidad.cpp ${MODEL}/Universidad.h ${MODEL}/Asistente.h ${MODEL}/Jurado.h ${MODEL}/Director.h ${MODEL}/Acta.h
g++ -c ${MODEL}/Universidad.cpp
view: ${VIEW}/View.cpp ${VIEW}/View.h ${MODEL}/Universidad.h
g++ -c ${VIEW}/View.cpp
main: main.cpp ${VIEW}/View.h
g++ -c main.cpp
clean: #comando para borrar los .o y el .exe
@echo "Cleaning compilation..."
del *.o, del *.exe
但是当我在控制台上执行 make 时它会跳过目标视图
g++ -c Model/Criterio.cpp
g++ -c Model/Acta.cpp
g++ -c Model/Persona.cpp
g++ -c Model/Director.cpp
g++ -c Model/Jurado.cpp
g++ -c Model/Asistente.cpp
g++ -c Model/Universidad.cpp
g++ -c main.cpp
g++ -o Salida Criterio.o Acta.o Persona.o Director.o Jurado.o Asistente.o Universidad.o View.o main.o
g++: error: View.o: No such file or directory
如您所见,它跳过了目标“视图”,因此它不会生成 View.o
但是,如果我将目标“view”的名称更改为“doview”之类的名称,它就可以完美运行。我尝试在 makefile 中查找保留字,但找不到与此相关的任何内容。为什么会这样?我是 makefile 的新手。
view: ${VIEW}/View.cpp ${VIEW}/View.h ${MODEL}/Universidad.h
g++ -c ${VIEW}/View.cpp
声明您将创建一个名为 view
的文件并且输入是 ${VIEW}/View.cpp ${VIEW}/View.h ${MODEL}/Universidad.h
。由于您的命令实际上生成了一个名为 View.o
的文件,因此您的 makefile 将不起作用。您需要:
View.o: ${VIEW}/View.cpp ${VIEW}/View.h ${MODEL}/Universidad.h
g++ -c ${VIEW}/View.cpp
(你的其他目标也有同样的问题)
您还需要将所有不生成文件的目标标记为虚假:
.PHONY: clean all
由于 compilar
不是虚假目标并生成单个文件,因此应将其重命名为 Salida
我有一个项目的以下 makefile:
VIEW := View
CONTROLLER := Controller
MODEL := Model
all: compilar
compilar: criterio acta persona director jurado asistente universidad view main
g++ -o Salida Criterio.o Acta.o Persona.o Director.o Jurado.o Asistente.o Universidad.o View.o main.o
criterio: ${MODEL}/Criterio.cpp ${MODEL}/Criterio.h
g++ -c ${MODEL}/Criterio.cpp
acta: ${MODEL}/Acta.cpp ${MODEL}/Acta.h ${MODEL}/Criterio.h
g++ -c ${MODEL}/Acta.cpp
persona: ${MODEL}/Persona.cpp ${MODEL}/Persona.h ${MODEL}/Acta.h
g++ -c ${MODEL}/Persona.cpp
director: ${MODEL}/Director.cpp ${MODEL}/Director.h ${MODEL}/Persona.h
g++ -c ${MODEL}/Director.cpp
jurado: ${MODEL}/Jurado.cpp ${MODEL}/Jurado.h ${MODEL}/Persona.h
g++ -c ${MODEL}/Jurado.cpp
asistente: ${MODEL}/Asistente.cpp ${MODEL}/Asistente.h ${MODEL}/Persona.h
g++ -c ${MODEL}/Asistente.cpp
universidad: ${MODEL}/Universidad.cpp ${MODEL}/Universidad.h ${MODEL}/Asistente.h ${MODEL}/Jurado.h ${MODEL}/Director.h ${MODEL}/Acta.h
g++ -c ${MODEL}/Universidad.cpp
view: ${VIEW}/View.cpp ${VIEW}/View.h ${MODEL}/Universidad.h
g++ -c ${VIEW}/View.cpp
main: main.cpp ${VIEW}/View.h
g++ -c main.cpp
clean: #comando para borrar los .o y el .exe
@echo "Cleaning compilation..."
del *.o, del *.exe
但是当我在控制台上执行 make 时它会跳过目标视图
g++ -c Model/Criterio.cpp
g++ -c Model/Acta.cpp
g++ -c Model/Persona.cpp
g++ -c Model/Director.cpp
g++ -c Model/Jurado.cpp
g++ -c Model/Asistente.cpp
g++ -c Model/Universidad.cpp
g++ -c main.cpp
g++ -o Salida Criterio.o Acta.o Persona.o Director.o Jurado.o Asistente.o Universidad.o View.o main.o
g++: error: View.o: No such file or directory
如您所见,它跳过了目标“视图”,因此它不会生成 View.o
但是,如果我将目标“view”的名称更改为“doview”之类的名称,它就可以完美运行。我尝试在 makefile 中查找保留字,但找不到与此相关的任何内容。为什么会这样?我是 makefile 的新手。
view: ${VIEW}/View.cpp ${VIEW}/View.h ${MODEL}/Universidad.h
g++ -c ${VIEW}/View.cpp
声明您将创建一个名为 view
的文件并且输入是 ${VIEW}/View.cpp ${VIEW}/View.h ${MODEL}/Universidad.h
。由于您的命令实际上生成了一个名为 View.o
的文件,因此您的 makefile 将不起作用。您需要:
View.o: ${VIEW}/View.cpp ${VIEW}/View.h ${MODEL}/Universidad.h
g++ -c ${VIEW}/View.cpp
(你的其他目标也有同样的问题)
您还需要将所有不生成文件的目标标记为虚假:
.PHONY: clean all
由于 compilar
不是虚假目标并生成单个文件,因此应将其重命名为 Salida