0

ささいな問題があります..コード simpletrial.cpp に追加することにした関数をリンクするために、動作中の Makefile を変更しようとしています (関数は IniFile.cpp です) 私の古い動作中の 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)$@
        @echo "$@ done"

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

.$(SrcSuf).$(ObjSuf):
        $(CXX) $(CXXFLAGS) -c $< -o $@

IniFile.cpp をコンパイルしてリンクしようとしても成功しませんでしたが、常に「'IniFile:: などへの未定義の参照」というエラーが表示されます。

4

1 に答える 1

0

リンクラインは次のとおりです。

$(LD) $(LDFLAGS) $^ $(GLIBS) $(OutPutOpt)$@

ここで、ルールのすべての前提条件である$ ^にリンクします。この場合は$(TESTO)であり、simpletrial.oであるため、IniFile.cppが含まれていないように見えるため、勝ちました。それとリンクしないでください。これを修正するには、次のようにIniFile.cppをテストに追加します。

TESTS           := simpletrial.cpp InFile.cpp

次に、両方のファイルをコンパイルしてリンクし、結果としてsimpletrialを生成する必要があります。

さらに、TESTOラインも変更する必要があると思います。

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

$(TESTS)変数の値を取得し、サフィックスを.cppから.oに変更する必要があります。現在の定義では、.Cから.o..にのみ変更されます。

于 2012-11-27T12:00:18.457 に答える