尝试使用此附加的makefile后,出现的错误是:
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
make: *** [Ass1F] Error 1
makefile是:
all: Ass1F
Ass1F: bin/main.o bin/x.o bin/y.o bin/z.o bin/w.o
g++ -o bin/main.o bin/x.o bin/y.o bin/z.o bin/w.o
@echo 'Finished building target: Ass1F'
@echo ' '
bin/x.o: src/x.cpp
g++ -g -Wall -Weffc++ -c -Linclude -o bin/x.o src/x.cpp
bin/y.o: src/y.cpp
g++ -g -Wall -Weffc++ -c -Linclude -o bin/y.o src/y.cpp
bin/z.o: src/z.cpp
g++ -g -Wall -Weffc++ -c -Linclude -o bin/z.o src/z.cpp
bin/w.o: src/w.cpp
g++ -g -Wall -Weffc++ -c -Linclude -o bin/w.o src/w.cpp
bin/main.o: src/main.cpp
g++ -g -Wall -Weffc++ -c -Linclude -o bin/main.o src/main.cpp
clean:
rm -f bin/*
我应该怎么处理这个问题? 原因是代码中的makefile或其他东西? 只是为了让你知道我们使用eclipse来编写代码,一切都运行得很好 - 没有任何错误。
感谢
答案 0 :(得分:4)
行g++ -o bin/main.o bin/x.o bin/y.o bin/z.o bin/w.o
尝试创建名为bin/main.o
的可执行文件,覆盖其先前的内容。
应该是例如g++ -o Ass1F bin/main.o bin/x.o bin/y.o bin/z.o bin/w.o
答案 1 :(得分:0)
Ass1F
的makefile配方不正确,它没有指定输出文件,os make使用bin/main.o
作为输出文件而不是其中一个输入文件。
您可以使用模式规则(即使用通配符)并使用预定义的变量(例如$@
(目标名称)和$^
(先决条件列表)和CXX
(C ++编译器):
CXXFLAGS = -g -Wall -Weffc++
CPPFLAGS =
LDFLAGS =
LDLIBS =
all: Ass1F
Ass1F: bin/main.o bin/x.o bin/y.o bin/z.o bin/w.o
$(CXX) $(LDFLAGS) -o $@ $^ $(LDLIBS)
@echo 'Finished building target: Ass1F'
@echo ' '
bin/%.o: src/%.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $^
clean:
rm -f bin/*