makefile для cppunit
Это мой make-файл:
#Makefile
CC=g++
CFLAGS=-lcppunit
OBJS=Money.o MoneyTest.o
all : $(OBJS)
$(CC) $(OBJS) -o TestUnitaire
#création des objets
Money.o: Money.cpp Money.hpp
$(CC) -c Money.cpp $(CFLAGS)
MoneyTest.o: MoneyTest.cpp Money.hpp MoneyTest.hpp
$(CC) -c MoneyTest.cpp $(CFLAGS)
clean:
rm *.o $(EXEC)
когда я запускаю этот make-файл, я получаю такие ошибки:
g ++ Money.o MoneyTest.o -o TestUnitaire Money.o: в функции
main': Money.cpp:(.text+0x3c): undefined reference to
CppUnit::TestFactoryRegistry::getRegistry(std::basic_string, std::allocator > const&)' Money.cpp:(. Text+0x78): неопределенная ссылка наCppUnit::TextTestRunner::TextTestRunner(CppUnit::Outputter*)' Money.cpp:(.text+0x8c): undefined reference to
CppUnit::TestRunner::addTest(CppUnit::Test*)' Money.cpp:(. Text+0x98): неопределенная ссылка наCppUnit::TextTestRunner::result() const' Money.cpp:(.text+0xec): undefined reference to
CppUnit::CompilerOutputter::CompilerOutputter(CppUnit::TestResultCollector*, std::basic_ostream >&, std::basic_string, std::allocator > const&)' Money.cpp:(. Text+0xfc): неопределенная ссылка наCppUnit::TextTestRunner::setOutputter(CppUnit::Outputter*)' Money.cpp:(.text+0x168): undefined reference to
CppUnit::TextTestRunner::run(std::basic_string, std::allocator >, bool, bool, bool)' Money.cpp:(. Text+0x1a5): неопределенная ссылка наCppUnit::TextTestRunner::~TextTestRunner()' Money.cpp:(.text+0x233): undefined reference to
CppUnit::TextTestRunner::~TextTestRunner()"
Кажется, что между моим классом нет никакой связи. В чем проблема?
1 ответ
-lcppunit
флаг неверен в CFLAGS
, где вы положили флаги компилятора Си. Вы (а) компилируете программы на С ++, а не программы на С, и (б) -l
flag - это флаг компоновщика, а не флаг компилятора. Так же CC
переменная содержит компилятор Си Вы должны использовать CXX
переменная для компилятора C++. Ваш make-файл должен выглядеть примерно так:
#Makefile
CXX = g++
LDLIBS = -lcppunit
OBJS = Money.o MoneyTest.o
all : TestUnitaire
TestUnitaire: $(OBJS)
$(CXX) $^ -o $@ $(LDFLAGS) $(LDLIBS)
#création des objets
%.o : %.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ -c $<
Money.o: Money.hpp
MoneyTest.o: Money.hpp MoneyTest.hpp
clean:
rm *.o $(EXEC)