生成文件 - Erro:文件被截断

Makefile - Erro: file truncated

本文关键字:文件 Erro      更新时间:2023-10-16

我有一个简单的Makefile:

CC=g++
CFLAGS= -Wall -std=c++11 -M -MF dependencyFileName.d -c
objects = Table.o LimitedTable.o aDimension.o test.o
edit: $(objects)
    g++ -o edit $(objects)
test.o: LimitedTable.o Table.o aDimension.o test.cpp
    $(CC) $(CFLAGS) test.cpp -o test.o
LimitedTable.o: LimitedTable.cpp LimitedTable.hpp Table.o aDimension.o
    $(CC) $(CFLAGS) LimitedTable.cpp -o LimitedTable.o
aDimension.o: aDimension.cpp aDimension.cpp Table.o
    $(CC) $(CFLAGS) aDimension.cpp -o aDimension.o
Table.o: Table.cpp Table.hpp
    $(CC) $(CFLAGS) Table.cpp -o Table.o
clean:
    rm -f *.o

我收到此错误:

marius@marius-Lenovo-Y50-70 ~/Documents $ make clean
rm -f *.o
marius@marius-Lenovo-Y50-70 ~/Documents $ make edit
g++ -Wall -std=c++11 -M -MF dependencyFileName.d -c Table.cpp -o Table.o
g++ -Wall -std=c++11 -M -MF dependencyFileName.d -c aDimension.cpp -o aDimension.o
g++ -Wall -std=c++11 -M -MF dependencyFileName.d -c LimitedTable.cpp -o LimitedTable.o
g++ -Wall -std=c++11 -M -MF dependencyFileName.d -c test.cpp -o test.o
g++ -o edit Table.o LimitedTable.o aDimension.o test.o
Table.o: file not recognized: File truncated
collect2: error: ld returned 1 exit status
make: *** [edit] Error 1

谁能告诉我出了什么问题?其中一个文件中包含的错误可能是此错误的原因吗?

处理依赖项文件的方式存在一些问题,但首先:

我有一个简单的生成文件

不,你没有。样板代码的数量太高了,将任何文件添加到您的项目中都需要您再次手动编辑该生成文件。

你的制作文件应该归结为:

SRC         :=  $(wildcard *.cpp)
OBJ         :=  $(SRC:.cpp=.o)
DEP         :=  $(OBJ:.o=.d)
CPPFLAGS    :=  -MMD -MP
CXXFLAGS    :=  -std=c++11 -Wall
edit: $(OBJ)
    $(CXX) $^ -o $@
-include $(DEP)
clean:
    $(RM) $(OBJ) $(DEP)

在这里你 :

  • 避免过多地重复自己,
  • 充分利用 make 的隐式规则来节省时间,
  • 使用正确的内置变量而不是覆盖错误的变量,
  • 正确处理依赖文件的创建,实际使用它们来防止手动重新编译,
  • .cpp.hpp文件添加到项目时无需编辑生成文件。

此外,这应该可以解决您的问题。在发生此类错误("文件被截断")后,不要忘记在尝试再次编译之前进行清理。