У меня возникли проблемы со сборкой небольшой программы, которая использует Boost.Test на моем Mac с Boost, установленным на MacPorts в /opt/local/lib/
подталкивание испытания с CMake - неопределенный главный
Вот мой минимальный исходный файл, test.cpp
:
#define BOOST_TEST_MODULE MyTest
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE(test1) {
}
и мой CMakeLists.txt
:
cmake_minimum_required(VERSION 2.6)
project (test)
find_package(Boost COMPONENTS unit_test_framework REQUIRED)
add_executable(test test.cpp)
и отрывок из из make VERBOSE=1
:
[100%] Building CXX object CMakeFiles/test.dir/test.cpp.o
g++ -o CMakeFiles/test.dir/test.cpp.o -c /Users/exclipy/Code/cpp/inline_variant/question/test.cpp
Linking CXX executable test
"/Applications/CMake 2.8-5.app/Contents/bin/cmake" -E cmake_link_script CMakeFiles/test.dir/link.txt --verbose=1
g++ -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/test.dir/test.cpp.o-o test
Undefined symbols for architecture x86_64:
"_main", referenced from:
start in crt1.10.6.o
"vtable for boost::unit_test::unit_test_log_t", referenced from:
boost::unit_test::unit_test_log_t::unit_test_log_t() in test.cpp.o
boost::unit_test::unit_test_log_t::~unit_test_log_t() in test.cpp.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
Как вы можете видеть, он не знает, как связаться с библиотекой Boost. Поэтому я стараюсь добавлять к CMakeLists.txt:
target_link_libraries(test boost_unit_test_framework)
Но я просто получаю:
g++ -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/test.dir/test.cpp.o-o test -lboost_unit_test_framework
ld: library not found for -lboost_unit_test_framework
Из большого количества проб и ошибок, я обнаружил, что вручную работает это работает:
$ g++ test.cpp -L/opt/local/lib -lboost_unit_test_framework -DBOOST_TEST_DYN_LINK
Но после долгих часов возиться, я не могу заставить его строить из CMake. Мне все равно, связано ли это динамически или статически, я просто хочу, чтобы он работал.
Обратите внимание, что 'Boost_TEST_EXEC_MONITOR_LIBRARY' не существует (по крайней мере) для FindBoost.cmake для cmake версии> 3.x. –