Ошибка связывания с cppunit, cmake, ubuntu
Мне жаль, что это, вероятно, полный вопрос нуб, но я становлюсь отчаянным Я пытаюсь запустить cppunit с KDevelop/CMake в Ubuntu
Я установил libcppunit-dev:
markus@hp-notebook:~$ apt-cache policy libcppunit-dev
libcppunit-dev:
Installed: 1.12.1-4
Candidate: 1.12.1-4
Version table:
*** 1.12.1-4 0
500 http://at.archive.ubuntu.com/ubuntu/ precise/main i386 Packages
100 /var/lib/dpkg/status
Мой CMakeLists.txt выглядит так:
project(simpletest)
include_directories(/usr/local/include/)
link_directories(/usr/lib/)
add_executable(simpletest main.cpp)
LINK_LIBRARIES(simpletest cppunit)
и мой самый простой, как это:
#include <iostream>
#include <cppunit/ui/text/TestRunner.h>
#include <cppunit/CompilerOutputter.h>
#include <cppunit/TestFixture.h>
#include <cppunit/extensions/HelperMacros.h>
int main() {
CppUnit::Test* suite = CppUnit::TestFactoryRegistry::getRegistry().makeTest();
CppUnit::TextUi::TestRunner runner;
runner.addTest(suite);
runner.setOutputter(new CppUnit::CompilerOutputter(&runner.result(), std::cerr));
return runner.run() ? 0 : 1;
}
Если я просто сделаю:
g++ simpletest.cpp -lcppunit -o simpletest.bin
Все компилируется и ссылки просто отлично. Но если я строю с использованием CMake, я получаю ошибки компоновщика:
/home/markus/projects/simpletest/build> make
-- Configuring done
-- Generating done
-- Build files have been written to: /home/markus/projects/simpletest/build
Scanning dependencies of target simpletest
[100%] Building CXX object CMakeFiles/simpletest.dir/main.cpp.o
Linking CXX executable simpletest
CMakeFiles/simpletest.dir/main.cpp.o: In function `main':
/home/markus/projects/simpletest/main.cpp:9: undefined reference to `CppUnit::TestFactoryRegistry::getRegistry(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/home/markus/projects/simpletest/main.cpp:11: undefined reference to `CppUnit::TextTestRunner::TextTestRunner(CppUnit::Outputter*)'
/home/markus/projects/simpletest/main.cpp:12: undefined reference to `CppUnit::TestRunner::addTest(CppUnit::Test*)'
/home/markus/projects/simpletest/main.cpp:13: undefined reference to `CppUnit::TextTestRunner::result() const'
/home/markus/projects/simpletest/main.cpp:13: undefined reference to `CppUnit::CompilerOutputter::CompilerOutputter(CppUnit::TestResultCollector*, std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/home/markus/projects/simpletest/main.cpp:13: undefined reference to `CppUnit::TextTestRunner::setOutputter(CppUnit::Outputter*)'
/home/markus/projects/simpletest/main.cpp:15: undefined reference to `CppUnit::TextTestRunner::run(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, bool, bool)'
/home/markus/projects/simpletest/main.cpp:15: undefined reference to `CppUnit::TextTestRunner::~TextTestRunner()'
/home/markus/projects/simpletest/main.cpp:15: undefined reference to `CppUnit::TextTestRunner::~TextTestRunner()'
collect2: ld returned 1 exit status
make[2]: *** [simpletest] Error 1
make[1]: *** [CMakeFiles/simpletest.dir/all] Error 2
make: *** [all] Error 2
*** Failed ***
Так как он работает при непосредственном вызове g++, я предполагаю, что все библиотеки есть и работают (без сбоев компилятора и т. Д.), Но проблема в моем файле CMake. - Как должно работать объявление библиотеки - например, библиотека называется libcppunit или просто cppunit. Я предполагаю, что я просто делаю какую-то глупую ошибку, но любая помощь будет принята с благодарностью.
2 ответа
Хорошо, я только что нашел ошибку. Я использовал LINK_LIBRARIES вместо target_link_libraries
Этот CMakeLists.txt прекрасно работает:
cmake_minimum_required(VERSION 2.8)
project(simpletest)
add_executable(simpletest main.cpp)
target_link_libraries (simpletest cppunit)
@ πάντα ῥεῖ Спасибо за отличную ссылку
CMakeFiles/test.dir/canonunittest.cpp.o: в функции CppUnit::AutoRegisterSuite<canonunittest>::AutoRegisterSuite()':
canonunittest.cpp:(.text._ZN7CppUnit17AutoRegisterSuiteI13canonunittestEC2Ev[_ZN7CppUnit17AutoRegisterSuiteI13canonunittestEC5Ev]+0x44): undefined reference to
CppUnit::TestFactoryRegistry::getRegistry(stlp_std::basic_string, stlp_std::allocator > const&)'
CMakeFiles/test.dir/canonunittest.cpp.o: в функции `CppUnit::TestSuiteFactory::makeTest()':