2012-11-27 136 views
0

我有一个微不足道的问题..我试图修改一个工作的Makefile来链接一个函数,我决定在我的代码中添加simpletrial.cpp(该函数是IniFile.cpp) 我的旧工作Makefile是:makefile链接问题

include Makefile.arch 
TESTS   := simpletrial.cpp 
TESTO   := $(TESTS:.C=.o) 
TEST   := simpletrial 

OBJ    = $(TESTO) 
PROGRAMS  = $(TEST) 

CXXFLAGS  += 
CXXFLAGS  += 
GLIBS   += 

.SUFFIXES: .$(SrcSuf) .$(ObjSuf) .$(DllSuf) 

all:   $(PROGRAMS) 

$(TEST):  $(TESTO) 
     $(LD) $(LDFLAGS) $^ $(GLIBS) $(OutPutOpt)[email protected] 
     @echo "[email protected] done" 

clean: 
     @rm -f $(OBJ) $(TESTO) core *~ src/*~ include/*~ 

.$(SrcSuf).$(ObjSuf): 
     $(CXX) $(CXXFLAGS) -c $< -o [email protected] 

我曾尝试没有成功编译和链接IniFile.cpp但我总是收到错误消息“未定义的引用“INIFILE ::等等等等 感谢

回答

0

您的链接线如下:

$(LD) $(LDFLAGS) $^ $(GLIBS) $(OutPutOpt)[email protected] 

在这里,您链接$ ^,这是规则的所有前置请求,在这种情况下是$(TESTO),并且是simpletrial.o,您似乎没有IniFile.cpp,所以它不会与它链接。要修复它只是添加IniFile.cpp到你的测试如下:

TESTS   := simpletrial.cpp InFile.cpp 

那么就应该编译和这两个文件链接在一起,并产生simpletrial结果。

此外,我认为你TESTO行可能需要改变,以及:

TESTO   := $(TESTS:.cpp=.o) 

这应该在$值(测试)变量,然后从的.cpp更改后缀到.O,目前清晰度只会改变.C到.o ...

+0

太棒了!有用! – Tiutto