Makefile无法生成可执行文件,引入.txt文件是否为报错原因?
Makefile问题排查与修正方案
核心错误说明
你遇到的报错和.txt文件本身能否放在同级目录无关,核心问题是Makefile的编译规则、clean规则存在语法和逻辑错误:
- 编译命令错误使用g参数,且错误将非C源码的.txt文件、尚未生成的目标文件
main作为编译输入 - clean规则未增加忽略不存在文件的参数,无目标文件时运行会触发找不到文件的报错
具体错误拆解
- 编译规则错误
g++编译生成可执行文件的标准语法为:g++ [编译选项] 输入源文件列表 -o 输出可执行文件名
你原规则中的命令$(CXX) $(CXXFLAGS) pe3_bash.txt pe3_references.cpp main存在两处问题:
- 将
pe3_bash.txt非源码文件传入编译器,编译器无法识别该类文件格式触发报错 - 末尾的
main是你要生成的目标文件,放在输入位置会让编译器误以为需要读取该现有文件参与编译,但此时main尚未生成,因此抛出找不到文件/目录的错误,这也是你去掉.txt文件后仍然报错的核心原因。
- clean规则错误
原规则中rm main未添加强制删除参数,当目录下不存在main可执行文件时,运行make clean会触发找不到文件的报错。
修正后Makefile代码
CXX = g++ # 编译器定义 CXXFLAGS = -std=c++17 -Wall # 编译选项:启用C++17标准,输出所有警告 all: main # 仅传入cpp源文件参与编译,用-o指定输出文件为main main: pe3_references.cpp $(CXX) $(CXXFLAGS) pe3_references.cpp -o main # 加-f参数,删除时忽略不存在的文件,不抛出错误 clean: rm -f main
验证步骤
- 保存修正后的Makefile
- 运行
make即可生成main可执行文件 - 运行
make clean即可无报错删除生成的main文件
内容的提问来源于stack exchange,提问作者TreeJ
相关产品推荐
相关产品推荐

