链接器输入文件未使用,因为链接未完成

时间:2016-10-29 02:25:26

标签: c++ makefile compilation linker

我编译程序时遇到问题,我一直在尝试一些问题的解决方案,但它对我不起作用,所以这是我的问题

INCLUDE = include
LIB     = lib
OBJ     = obj
SRC     = src
BIN     = bin
CXX     = g++
CPPFLAGS = -Wall -g -c 

$(BIN)/pruebacronologia : $(OBJ)/pruebacronologia.o 
    $(CXX) -o $(BIN)/pruebacronologia $(OBJ)/EventoHistorico.o $(SRC)/EventoHistorico.cpp -I$(INCLUDE)
$(OBJ)/EventoHistorico.o : $(SRC)/EventoHistorico.cpp
    $(CXX) $(CPPFLAGS)  -o $(OBJ)/EventoHistorico.o $(SRC)/EventoHistorico.cpp -I$(INCLUDE)

$(OBJ)/cronologia.o : $(SRC)/cronologia.cpp $(OBJ)/EventoHistorico.o
    $(CXX) $(CPPFLAGS) -o $(OBJ)/cronologia.o $(SRC)/cronologia.cpp $(OBJ)/EventoHistorico.o -I$(INCLUDE)

$(OBJ)/pruebacronologia.o : $(SRC)/pruebacronologia.cpp $(OBJ)/cronologia.o 
    $(CXX) $(CPPFLAGS) -o $(OBJ)/pruebacronologia.o $(SRC)/pruebacronologia.cpp $(OBJ)/cronologia.o $(OBJ)/EventoHistorico.o -I$(INCLUDE)

然后我在bash上得到了这个错误:

g++: warning: obj/cronologia.o: linker input file unused because linking not done
g++: warning: obj/EventoHistorico.o: linker input file unused because linking not done
g++ -o obj/EventoHistorico.o -Iinclude
g++: fatal error: no input files
compilation terminated.
make: *** [bin/pruebacronologia] Error 4

1 个答案:

答案 0 :(得分:1)

你的makefile似乎没有很好的构造。对于每个目标.o,只需设置从相应的.c文件编译的.o。 要构造可执行文件,只需附加所有生成的.o。 我认为这样的事情会更好:

INCLUDE = include
LIB     = lib
OBJ     = obj
SRC     = src
BIN     = bin
CXX     = g++
CPPFLAGS = -Wall -g -c 

$(BIN)/pruebacronologia : $(OBJ)/cronologia.o $(OBJ)/pruebacronologia.o $(OBJ)/EventoHistorico.o 
    $(CXX) -o $(BIN)/pruebacronologia $^ $(LDFLAGS)

$(OBJ)/EventoHistorico.o : $(SRC)/EventoHistorico.cpp
    $(CXX) $(CPPFLAGS)  -o $(OBJ)/EventoHistorico.o $(SRC)/EventoHistorico.cpp -I$(INCLUDE)

$(OBJ)/cronologia.o : $(SRC)/cronologia.cpp 
    $(CXX) $(CPPFLAGS) -o $(OBJ)/cronologia.o $(SRC)/cronologia.cpp -I$(INCLUDE)

$(OBJ)/pruebacronologia.o : $(SRC)/pruebacronologia.cpp  
    $(CXX) $(CPPFLAGS) -o $(OBJ)/pruebacronologia.o $(SRC)/pruebacronologia.cpp -I$(INCLUDE)