2012-04-20 5 views
0

J'utilise la structure suivante pour un Makefile:Makefile ne fonctionne pas pour stimuler

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) 

Mais quand je rentre faire, il me donne beaucoup d'erreurs - dont:

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 

Quand je utiliser g++ -Wall -Iusr/include/boost_1_49_0 -Lusr/include/boost_1_49_0/stage/lib -o time time.cpp -lboost_date_time, le code compile bien donc quelque chose ne va pas avec mon Makefile. S'il vous plaît aider. Note: J'ai essayé de placer le drapeau -L <directory> dans la variable LDFLAG mais cela n'a pas fonctionné non plus.

Répondre

1

LDFLAGS n'est pas utilisé dans votre Makefile - directement ou implicitement via des règles intégrées. Ce qui suit devrait fonctionner:

$(PROGRAM): $(OBJECTS) 
    $(CXX) $(LDFLAGS) $(TARGET_ARCH) $^ $(LOADLIBES) $(LDLIBS) -o [email protected] 

make est un outil puissant. Cependant, ce n'est pas trivial à utiliser. Si vous n'êtes pas obligé d'utiliser make, je vous suggère de regarder de plus près les alternatives. Personnellement, je recommande l'utilisation de bjam/boost-build. Voici un exemple pour un simple 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 
    ; 
Questions connexes