簡體   English   中英

Makefile-Erro:文件被截斷

[英]Makefile - Erro: file truncated

我有一個簡單的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

誰能告訴我哪里錯了? 可能其中一個文件包含錯誤是導致此錯誤的原因嗎?

處理依賴文件的方式存在一些問題,但首先:

我有一個簡單的Makefile

不,你不會。 樣板代碼的數量太多了,將任​​何文件添加到您的projet中都將需要您再次手動編輯該makefile。

您的Makefile應該歸結為:

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文件添加到項目時,無需編輯makefile。

另外,那應該解決您的問題。 在發生此類錯誤(“文件被截斷”)之后,請不要忘記嘗試再次進行編譯之前先進行清理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM