我有一个简单的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
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
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
Run Code Online (Sandbox Code Playgroud)
谁能告诉我有什么问题?其中一个文件中的错误包含是否是导致此错误的原因?
处理依赖项文件的方式存在一些问题,但首先:
我有一个简单的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)
Run Code Online (Sandbox Code Playgroud)
在这里你:
.cpp或.hpp文件时,不需要编辑makefile .此外,这应该可以解决您的问题.在发生此类错误("文件截断")后再次尝试编译之前,请不要忘记清理.