Мне нужно включить Boost.Test в мою программу на C++ в macOS. Прежде чем сделать это, мне сначала нужно протестировать make-файлы на примере: https://github.com/jsankey/boost.test-примеры Включенный make-файл не работает, поэтому я изменил его.
TARGETS=main hello suites fixtures assertions
INC=-I/usr/local/boost/include
LDFLAGS=-L/usr/local/lib -lboost_unit_test_framework
all: $(TARGETS)
test: $(TARGETS) $(addprefix run-,$(TARGETS))
main.o: main.cpp
$(CXX) $< $(INC) -c
hello.o: hello.cpp
$(CXX) $< $(INC) -c
suites.o: suites.cpp
$(CXX) $< $(INC) -c
fixtures.o: fixtures.cpp
$(CXX) $< $(INC) -c
assertions.o: assertions.cpp
$(CXX) $< $(INC) -c
main: main.o
$(CXX) $^ $(LDFLAGS) -o $@
hello: hello.o
$(CXX) $^ $(LDFLAGS) -o $@
suites: suites.o
$(CXX) $^ $(LDFLAGS) -o $@
fixtures: fixtures.o
$(CXX) $^ $(LDFLAGS) -o $@
assertions: assertions.o
$(CXX) $^ $(LDFLAGS) -o $@
run-%: %
-./$^ --output_format=XML --log_level=test_suite > $(^)-report.xml
clean:
rm $(TARGETS) *-report.xml
ОТРЕДАКТИРОВАНО: Теперь компиляция работает нормально. Связывание, с другой стороны, вызывает ошибку, а именно следующее:
ld: предупреждение: игнорируется файл /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libSystem.tbd, файл был создан для неподдерживаемого формата файла ( 0x2D 0x2D 0x2D 0x20 0x21 0x74 0x61 0x70 0x69 0x2D 0x74 0x62 0x64 0x2D 0x76 0x33 ), который не является связанной архитектурой (x86_64): usr/lib/libSystem.tbd Неопределенные символы для архитектуры x86_64: "__Unwind_Resume", ссылка из: boost::unit_test::singleton::instance() в hello.o boost::unit_test::make_test_case(boost::function const&, boost::unit_test::basic_cstring, boost::unit_test::basic_cstring, unsigned long) в hello.o UniverseInOrder_invoker() в hello.o boost::unit_test::singleton::instance() в hello.o UniverseInOrder::test_method() в hello.o boost::unit_test::lazy_ostream::instance() в hello.o boost::basic_wrap_stringstream::str() в hello.o ... "___bzero", ссылка на: UniverseInOrder_invoker() в hello.o "___cxa_atexit", ссылка из:
boost::unit_test::singleton::instance() в hello.o boost::unit_test::singleton::instance() в hello.o boost::unit_test::lazy_ostream::instance() в hello.o "_memcpy", ссылка из: std::__1::char_traits::copy(char*, char const*, unsigned long) в hello.o "_memset", ссылка из: std::__1::ostreambuf_iterator > std::__1::__pad_and_output >(std::__1::ostreambuf_iterator >, char const*, char const*, char const*, std::__1::ios_base&, char) привет .о std::__1::char_traits::assign(char*, unsigned long, char) в hello.o boost::basic_wrap_stringstream::basic_wrap_stringstream() в hello.o std::__1::basic_stringbuf, std::__1::allocator >::seekoff(long long, std::__1::ios_base::seekdir, unsigned int) в hello.o std::__1::basic_stringbuf, std::__1::allocator >::str() const в hello.o std::__1::basic_ostream >& boost::unit_test::operator<<, char const>(std::__1::basic_ostream >&, boost::unit_test::basic_cstring const&) в hello.o "_strcmp", ссылка из:
boost::typeindex::stl_type_index::equal(boost::typeindex::stl_type_index const&) const в hello.o "_strlen", ссылка из: std::__1::char_traits::length(char const*) в hello.o ld: символ(ы) не найден(ы) для архитектуры x86_64 clang-4.0: ошибка: команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v, чтобы увидеть вызов) make: *** [Makefile:21: привет] Ошибка 1
@PaulMcKenzie Я изменил это. Проблема сохраняется.
Я думаю, вам нужно включить -I /usr/local/boost/include в путь поиска, а не /usr/local/boost.
@natersoz Это было изменено. Однако проблема сохраняется.
Путь включения не отображается в вашей командной строке. Там нет "-I/usr/local/boost/include". Я посмотрю еще раз.
@natersoz Вы правы. Теперь у меня другая проблема.
Неразрешенные символы для регистрации материалов с искаженными именами ...?
@natersoz Ну, теперь я подозреваю, что Анаконда является причиной проблемы. Это также портит cmake.
Давайте продолжить обсуждение в чате.
Я также работаю в основном с Mac (OSX) и получаю те же ошибки. См. этот сеанс вопросов и ответов: stackoverflow.com/questions/8685045/… Компиляция и компоновка в Linux (у меня для этого есть виртуальная машина) работает нормально. В стране LLVM/OSX происходит что-то глупое. Ответ где-то в этой ветке.





Вы утверждаете, что здесь установлен boost,
/usr/local/boost/includeя не вижуincludeкак подкаталог в вашихINCнастройках.