编译目标失败求助:联邦所得税计算程序Makefile问题
解决Makefile中"Recipe for target failed"的问题
嘿,我一眼就揪出问题所在了——你的文件名里用了#,而这个字符在Makefile里是注释的起始标记,直接把整个Makefile的语法结构搞乱了!
咱们来拆解下具体的错误点:
- 比如
OBJ = #3.o这一行,Make会把#后面的所有内容都当成注释,导致OBJ变量实际上是空的; - 再看
#3.o: #3.cpp这一行,#3.cpp前面的#直接把依赖关系给注释掉了,后续的编译命令也会被错误解析,Make根本找不到正确的编译目标和依赖文件,自然会报"Recipe for target failed"。
最简单的解决方案:修改文件名
直接把你的源文件改成不带特殊字符的名字,比如hw3.cpp,然后对应修改Makefile里的内容,修改后的完整Makefile如下:
CPP = g++.exe CC = gcc.exe WINDRES = windres.exe OBJ = hw3.o LINKOBJ = hw3.o LIBS = -L"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib" -L"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib" -static-libgcc INCS = -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include" CXXINCS = -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include/c++" BIN = HOMEWORK.exe CXXFLAGS = $(CXXINCS) CFLAGS = $(INCS) RM = rm.exe -f .PHONY: all all-before all-after clean clean-custom all: all-before $(BIN) all-after clean: clean-custom ${RM} $(OBJ) $(BIN) $(BIN): $(OBJ) $(CPP) $(LINKOBJ) -o $(BIN) $(LIBS) hw3.o: hw3.cpp $(CPP) -c hw3.cpp -o hw3.o $(CXXFLAGS)
如果一定要保留带#的文件名(不推荐)
要是你坚持要用#3.cpp这个文件名,需要对#进行转义并用单引号包裹文件名,但这种方式很容易踩其他坑,仅作参考:
# 注意:这种方式容易引发其他问题,不推荐使用 CPP = g++.exe CC = gcc.exe WINDRES = windres.exe OBJ = '#3.o' LINKOBJ = '#3.o' # 其他配置保持不变... $(BIN): $(OBJ) $(CPP) $(LINKOBJ) -o $(BIN) $(LIBS) '#3.o': '#3.cpp' $(CPP) -c '#3.cpp' -o '#3.o' $(CXXFLAGS)
还是强烈建议你修改文件名,避开Makefile中有特殊含义的字符(比如#、$、空格等),这样能省掉很多不必要的麻烦~
内容的提问来源于stack exchange,提问作者user12091451
相关产品推荐
相关产品推荐

