0

Makefile に次の構造を使用しています。

OBJECTS := time.o
PROGRAM := time
CPPFLAGS += -Iusr/include/boost_1_49_0 -Lusr/include/boost_1_49_0/stage/lib
CXXFLAGS := -Wall -ggdb3
LDFLAGS += -lboost_date_time
$(PROGRAM) : $(OBJECTS)
g++ -o time time.cpp

clean :
rm $(PROGRAM) $(OBJECTS)

しかし、makeに入ると、次のような多くのエラーが発生します。

undefined reference to `boost::gregorian::greg_month::as_short_string() const' time.cpp:
(.text._ZN5boost9date_time15month_formatterINS_9gregorian10greg_monthENS0_13simple_formatIcEEcE12format_monthERKS3_RSo[boost::date_time::month_formatter<boost::gregorian::greg_month, boost::date_time::simple_format<char>, char>::format_month(boost::gregorian::greg_month const&, std::basic_ostream<char, std::char_traits<char> >&)]+0x56):
    undefined reference to `boost::gregorian::greg_month::as_long_string() const'
collect2: ld returned 1 exit status

を使用するg++ -Wall -Iusr/include/boost_1_49_0 -Lusr/include/boost_1_49_0/stage/lib -o time time.cpp -lboost_date_timeと、コードが正常にコンパイルされるため、Makefile に何か問題があります。助けてください。注:変数に-L <directory>フラグを配置しようとしましたLDFLAGが、それも機能しませんでした。

4

1 に答える 1

1

LDFLAGSMakefile では使用されません。組み込みルールを介して直接的にも暗黙的にも使用されません。以下が機能するはずです。

$(PROGRAM): $(OBJECTS)
    $(CXX) $(LDFLAGS) $(TARGET_ARCH) $^ $(LOADLIBES) $(LDLIBS) -o $@ 

make強力なツールです。ただし、使い方は簡単ではありません。make の使用を強制されていない場合は、代替手段を詳しく調べることをお勧めします。個人的には、bjam/boost-buildの使用をお勧めします。単純な例を次に示しJamrootます。

project
    : requirements <cflags>-Wall <cflags>-ggdb3
    ;

using gcc ;

lib boost_date_time
    :
    : <search>/usr/include/boost_1_49_0/stage/lib
    :
    : <include>/usr/include/boost_1_49_0
    ;

exe time
    : time.cpp foo.cpp bar.cpp boost_date_time
    ;
于 2012-04-20T08:00:52.143 に答える