【发布时间】:2015-04-18 05:54:58
【问题描述】:
我对制作文件非常陌生,但是在查看了一堆来源后,我无法找出为什么我的制作文件无法正常工作,它适用于 C++,如下所述。
CC=g++
CFLAGS=-g -Wall -pedantic -ansi
SOURCES=commercial.cpp comRentals.cpp comSales.cpp property.cpp rentals.cpp residential.cpp resRentals.cpp resSales.cpp sales.cpp testPropertyA.cpp utility1.cpp
OBJECTS=$(SOURCES:.cpp=.o)
TARGET = runme
all: $(TARGET)
$(TARGET): $(OBJECTS)
$(CC) $(CFLAGS) -o $(TARGET) $(OBJECTS)
.cpp.o:
$(CC) $(CFLAGS) -c $< -o $@
.PHONY: clean
clean:
-del $(OBJECTS) $(TARGET).exe
从 Windows 7 命令行运行时,它不断说以下内容
C:\Users\Stat Phantom\Desktop\UNIVERSITY\C++\Assignment1\StartUpCode\TaskA>make
g++ -g -Wall -pedantic -ansi -c commercial.cpp -o commercial.o
process_begin: CreateProcess(NULL, g++ -g -Wall -pedantic -ansi -c commercial.cp
p -o commercial.o, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [commercial.o] Error 2
不知道这里发生了什么,请帮忙,这可能很简单。
更新:删除了包含的标签并将 $@ 添加到 .cpp.o:但是发生了同样的错误
【问题讨论】:
-
您不应将头文件传递给编译器调用,而应将它们与
#include "xxx.h"一起使用 -
我在我的 .cpp 文件中这样做,我看到的参考文件在 make 文件中有它们
-
通常你让编译器创建一个依赖文件 (
.d) 列出使用-MM选项系列的头文件,并将这个包含在你的 makefile 中,以捕获由于头文件的变化而需要的重新编译. -
有必要吗?如果是这样会解决这个问题
-
“有必要吗?” 是的,如果你不想惊讶,为什么你的东西在发生变化时没有重新编译。如前所述,您应该删除此
INCLUDES=$(SOURCES:.cpp=.h),并将其从编译器调用中移除。