Почему Boost `bcp smart_ptr dir /` скопировал 6 МБ исходного кода? - PullRequest
3 голосов
/ 14 августа 2010

Итак, я хотел отделить только умные указатели от надстройки для использования в моем проекте, и мне было рекомендовано использовать утилиту bcp.

Сегодня я скомпилировал и сделал bcp smart_ptr to_copy_to_my_project/.

Результат: 6 МБ кода в каталоге to_copy_to_my_project/.

Ты что, шутишь? Я не хочу добавлять 6 МБ заголовочных файлов в мой проект размером 100 КБ только для использования умных указателей.

Например, он копирует следующий материал win32 (я на Linux):

Copying file: boost/thread/win32/basic_timed_mutex.hpp
Copying file: boost/thread/win32/condition_variable.hpp
Copying file: boost/thread/win32/interlocked_read.hpp

Зачем копировать win32 с помощью smart_ptr, когда я работаю в Linux?

Также:

Copying file: boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp
...
Copying file: boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp
...
Copying file: boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp

И

Copying file: boost/date_time/adjust_functors.hpp

Почему smart_ptr зависит от date_time?

А как насчет всех этих тестов, которые он скопировал:

Copying file: libs/smart_ptr/test/allocate_shared_esft_test.cpp
...

Мне это не нужно! Мне просто нужно smart_ptr!

Я сделал что-то не так? Почему он скопировал 6 МБ кода только для умных указателей, которые я бы ожидал, чтобы быть 10 КБ или 20 КБ ...

Спасибо, Бода Цидо.

Ответы [ 5 ]

1 голос
/ 12 октября 2010

Если все, что вам нужно, это smart_ptr и вас не интересует #define 'ing BOOST_SP_USE_QUICK_ALLOCATOR (который по умолчанию не определен), вам нужно только:

boost/assert.hpp
boost/checked_delete.hpp
boost/config.hpp
boost/config/compiler/*
boost/config/no_tr1/functional.hpp
boost/config/no_tr1/memory.hpp
boost/config/no_tr1/utility.hpp
boost/config/platform/*
boost/config/posix_features.hpp
boost/config/select_compiler_config.hpp
boost/config/select_platform_config.hpp
boost/config/select_stdlib_config.hpp
boost/config/stdlib/*
boost/config/suffix.hpp
boost/config/user.hpp
boost/current_function.hpp
boost/detail/interlocked.hpp
boost/detail/sp_typeinfo.hpp
boost/detail/workaround.hpp
boost/enable_shared_from_this.hpp
boost/exception/detail/attribute_noreturn.hpp
boost/exception/exception.hpp
boost/memory_order.hpp
boost/non_type.hpp
boost/shared_ptr.hpp
boost/smart_ptr/*
boost/throw_exception.hpp
boost/type.hpp

до 365 Кб, с большей частью кода на самом деле в boost/smart_ptrboost/config еще много кода.Если вы знаете, на какие платформы вы нацелены, вы можете сократить boost/config/compiler, boost/config/platform и boost/config/stdlib.Тогда подавляющее большинство кода будет в boost/smart_ptr.

0 голосов
/ 12 октября 2010

bcp будет копировать намного меньше, если вы сделаете

bcp shared_ptr.hpp to_copy_to_my_project/.

Это все еще кажется слишком большим, я согласен.

0 голосов
/ 14 августа 2010

Я подозреваю, что вы можете удалить папки test и win32 - они, вероятно, включены только при тестировании или на этой платформе.Я не могу говорить с большинством заголовочных файлов, но я знаю, что smart_ptr делает много сумасшедших вещей, так что вы можете конвертировать boost :: shared_ptr в boost :: shared_ptr, что большинство шаблонов не может сделать.Если вам нужен подсчитывающий указатель, который умещается только в нескольких файлах, написать его несложно, но он не так хорош, как boost.

Поскольку вы говорите, что используете Linux, почемуне просто повышение списка как зависимость?

0 голосов
/ 14 августа 2010

Причина в том, что boost поддерживает множество платформ и компиляторов, а модули boost используют другие модули boost. Хотя большинство из них будет #ifdef: ed, bcp недостаточно умён, чтобы сделать это.

У меня была похожая проблема, поэтому я понимаю вашу озабоченность. Я попытался запустить препроцессор без настроек платформы, тогда код стал значительно меньше.

В конце концов, мы обновили компилятор до версии, которая поддерживает C ++ tr1, и используем std :: tr1 :: shared_ptr.

Можно утверждать, что 6Meg - это небольшая цена за интеллектуальные указатели промышленного стандарта, однако не все разработчики / архитекторы чувствуют то же самое, и, поскольку я еще не деспот, мне пришлось согласиться с решением команды.

0 голосов
/ 14 августа 2010

Вы можете просто использовать общий указатель stl: std::tr1::shared_ptr, который для всех намерений и целей "равен" boost::shared_ptr.

...