2013-06-14 2 views
3

У меня создалось впечатление, что boost bcp с опцией namespace предназначался для переименования включений и определяет для всех перечисленных модулей. При запуске инструмента и анализе вывода он, похоже, не делает этого. Как мне перераспределить их, если они все еще #include <boost/*> и ожидать, что конечный пользователь #include <boost/*> не вызовет конфликт версий? Это просто обертывает их закрытием пространства имен?Что действительно делает bcp -namespace?

Я использовал следующую BCP команду:

.\boost_1_53_0\dist\bin\bcp.exe --boost=boost_1_53_0 --namespace=myboost --namespace-alias smart_ptr filesystem array.hpp container move ptr_container algorithm/string.hpp tokenizer.hpp thread chrono atomic foreach.hpp build myboost 

Быстрый Grep из файла yeilds:

[boost]grep -e "boost/" algorithm\string.hpp 
grep -e "boost/" algorithm\string.hpp 
#include <boost/algorithm/string/std_containers_traits.hpp> 
#include <boost/algorithm/string/trim.hpp> 
#include <boost/algorithm/string/case_conv.hpp> 
#include <boost/algorithm/string/predicate.hpp> 
#include <boost/algorithm/string/find.hpp> 
#include <boost/algorithm/string/split.hpp> 
#include <boost/algorithm/string/join.hpp> 
#include <boost/algorithm/string/replace.hpp> 
#include <boost/algorithm/string/erase.hpp> 
#include <boost/algorithm/string/classification.hpp> 
#include <boost/algorithm/string/find_iterator.hpp> 

Я довольно уверен, что это случай использования для инструмента BCP с пространством имен варианты, однако, я явно недопонимаю какую-то общую концепцию/использование C++, правильно? Или, возможно, я неправильно использую этот инструмент?

Заранее благодарим за понимание.

+1

Чтобы добавить к этому, мой коллега непреклонно настаивает на том, что мы должны искать и заменять «boost» во всем, включает и определяет. Тем не менее, сообщения, такие как этот [один] (http://stackoverflow.com/questions/836875/creating-library-with-backward-compatible-abi-that-uses-boost), указывают на то, что bcp уже делает это !! ! ??? – kevinmm

+1

Просто для того, чтобы уточнить, я понимаю, что основное внимание в этом инструменте - сканирование модулей повышения для зависимостей и их копирование в выходной путь. Я в первую очередь интересуюсь параметрами --namespace и --namespace-alias и дополнительными функциями, которые они предоставляют. – kevinmm

ответ

3

BCP --namespace = myboost --namespace псевдоним регулярное выражение конфигурации сборки/Foo

копирует полное регулярное выражение Lib (в Libs/регулярное выражение) плюс конфигурационного Lib (LIBS/конфигурации) и сборки system (tools/build) в/foo, включая все зависимости. Также переименовывает пространство имен boost в myboost и меняет имена файлов двоичных библиотек, чтобы начать с префикса «myboost», а не «boost». Опция -namespace-alias делает пространство имен увеличивающим псевдоним нового имени.

только файлы будут переименованы (libboost_regex.so будет libmyboost_regex.so), а не файлы заголовков. Кроме того, пространство имен boost будет заменено на myboostboost будет иметь псевдоним myboost).

+1

Итак ...никак не избежать конфликтов версий в операторах #include с BCP? Я столкнулся с той же проблемой. Конечно, пространство имен переименовано, но любой другой код, который использует boost, будет собирать мою копию заголовков всякий раз, когда они присутствуют. – flodin

0

Как название говорит, что переименовывает имен и библиотечные файлы (т.е. .dlls и .libs), но не каталоги в Wich заголовки проживают, и, следовательно, не включает в себя.

Библиотеки Boost обычно находятся в namespace boost. С помощью bcp вы изменили это пространство имен на myboost. Так, например, этот код становится действительным:

#include <boost/sharedptr.hpp> //header directories haven't changed 

myboost::shared_ptr<int> pi = myboost::make_shared<int>(5); //but the namespace has 

Благодаря --namespace-alias вы можете продолжать использовать namesapce импульс, так как boost стал псевдонимом myboost:

boost::shared_ptr<int> pi; //ok, this is in fact a myboost::shared_ptr 

Смотрите примеры в документации: http://www.boost.org/doc/libs/1_53_0/tools/bcp/doc/html/index.html

Смежные вопросы