Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Boost.Config

Boost , Boost.Config ,

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Next

Boost.Config

Vesa Karvonen, John Maddock Beman Dawes

Distributed under the Boost Software License, Version 1.0. (См. сопроводительный файл LICENSE_1_0.txt или копия на http://www.boost.org/LICENSE_1_0.txt)


Boost уже настроен для большинства распространенных компиляторов и платформ; вы должны иметь возможность использовать бульвар «как есть». Поскольку компилятор настроен отдельно от стандартной библиотеки, конфигурация по умолчанию должна работать, даже если вы заменяете стандартную библиотеку компилятора третьей стороной (например, STLport).

Использование повышения «как есть» без попытки перенастроить является рекомендуемым методом для использования повышения. Тем не менее, вы можете запустить сценарий настройки, если хотите, и есть тесты регрессии, которые позволяют тестировать текущую конфигурацию импульса с помощью настройки компилятора.

Пользователи библиотеки могут запросить поддержку дополнительных компиляторов или платформ, посетив наш Trac и представив запрос поддержки.

Увеличить реализацию библиотек доступа к макросам конфигурации через

#include <boost/config.hpp>

Хотя пользователи Boost не обязаны включать этот файл напрямую или использовать эти макросы конфигурации, такое использование является приемлемым. Макро конфигурации документируются с точки зрения их цели, использования и ограничений, которые делают их пригодными для использования как библиотекой, так и пользовательским кодом.

Boost informational или helper макросы предназначены для использования пользователями Boost, а также для нашего внутреннего использования. Обратите внимание, однако, что тест feature и defect test макросы были разработаны для внутреннего использования библиотеками Boost, а не пользовательским кодом, поэтому они могут измениться в любое время (хотя к ним не вносятся какие-либо гравюры). Проблемы с библиотекой, вызванные изменениями в конфигурационных макросах, сводятся к тестам на регрессию скорости, поэтому библиотеки Boost обновляются, чтобы учесть эти изменения. В отличие от этого, пользовательский код Boost может быть негативно затронут изменениями в макросах без предупреждения. Лучший способ следить за изменениями макросов, используемых в пользовательском коде, - следить за дискуссиями по списку разработчиков Boost.

[Important] Important

Этот сценарий настройки только устанавливает заголовки Boost для использования с конкретным компилятором. Это не влияет на бусть. Строить или как строятся библиотеки.

Если вы знаете, что повышение неверно настроено для вашей конкретной настройки, и вы находитесь на UNIX, как платформа, то вы можете попробовать улучшить ситуацию, запустив сценарий настройки импульса. Из командной строки вы должны будете втиснуть в /libs/конфигурация/ и тип:

sh ./настроить

вы увидите список предметов, которые проверяются, поскольку сценарий работает через тесты регрессии. Обратите внимание, что сценарий настройки только автоматически обнаруживает ваш компилятор, если он называется g++, c++ или CC. Если вы используете какой-то другой компилятор, вам нужно будет установить одну или несколько из следующих переменных среды:

Переменная

Описание

CXX

Название компилятора, например c++.

CXXFLAGS

Флаги компилятора для использования, например, -O2.

LDFLAGS

Флаги для использования, например, -L/мипат.

LIBS

Любые библиотеки для подключения, например, -lpthread.

Например, для запуска сценария настройки с HP aCC вы можете использовать что-то вроде:

export CXX="aCC"
export CXXFLAGS="-Aa -DAportable -D__HPACC_THREAD_SAFE_RB_TREE \
   -DRWSTD_MULTI_THREAD -DRW_MULTI_THREAD -D_REENTRANT -D_THREAD_SAFE"
export LDFLAGS="-DAportable"
export LIBS="-lpthread"
sh ./configure

Однако вы запускаете сценарий настройки, когда он закончит, вы найдете новый заголовок -user.hpp- расположен в <03>/libs/config/ каталог. Примечание, что настройка не устанавливает этот заголовок в ваш импульс, включает путь по умолчанию. Этот заголовок содержит все варианты, создаваемые скриптом настройки, плюс заголовок-секцию, которая содержит опции пользовательского набора из версии по умолчанию (находится под >/boost/конфигурация/. Есть два способа использовать этот заголовок:

  • Вариант 1: копировать заголовок в /boost/конфигурация/, чтобы заменить пользователь по умолчанию.hpp, предоставляемый импульсом. Эта опция позволяет только одну настраиваемую настройку; разработчики должны избегать этой опции, поскольку она несет опасность случайного совершения настраиваемого модуля в svn репозитории (что-то, за что вы не будете благодарны!).
  • Вариант 2: дать заголовку более запоминающееся имя и разместить его где-то удобно; затем определить макрос BOOST_USER_CONFIG, чтобы указать на это. Например, создайте новую поддиректорию /boost/config/ user/, и скопируйте заголовок там; например, мультрид>-gcc-p>. Затем, при компиляции добавить опцию командной строки: -DBOOST_USER_CONFIG="", и усилитель будет использовать новый заголовок конфигурации. Эта опция позволяет генерировать более одного заголовка конфигурации и держать их отдельно от источника импульса - так что обновления источника не мешают вашей конфигурации.

Существуют некоторые настройки, которые представляют собой выбор пользователей, а не дефекты компиляторов или конкретные параметры платформы. Они перечислены в <boost/config/user.hpp> и в начале настраиваемого user.hpp заголовок. Вы можете определить их на командной строке или путем редактирования <boost/config/user.hpp>, они перечислены в следующей таблице:

Macro

Описание

BOOST_USER_CONFIG

При определении он должен указывать на имя файла конфигурации пользователя, чтобы включить перед любыми файлами конфигурации импульса. При неопределении по умолчанию <boost/config/user.hpp>.

BOOST_COMPILER_CONFIG

При определении он должен указывать на имя файла конфигурации компилятора для использования. Определение этого отрезает логику выбора компилятора и устраняет зависимость от заголовка, содержащего эту логику. Например, если вы используете gcc, то вы можете определить BOOST_COMPILER_CONFIG на <boost/config/compiler/gcc.hpp<>>.

BOOST_STDLIB_CONFIG

При определении он должен указывать на имя стандартного файла конфигурации библиотеки для использования. Определение этого вычеркивает стандартную логику выбора библиотеки и устраняет зависимость от заголовка, содержащего эту логику. Например, если вы используете STLport, то вы можете определить BOOST_STDLIB_CONFIG <boost/config/stdlib/stlport.hpp>.

BOOST_PLATFORM_CONFIG

При определении он должен указывать на имя файла конфигурации платформы для использования. Определение этого отрезает логику выбора платформы и устраняет зависимость от заголовка, содержащего эту логику. Например, если вы компилируете на linux, то вы можете определить BOOST_PLATFORM_CONFIG <boost/config/platform/linux<37>.hpp>.

BOOST_NO_COMPILER_CONFIG

При определении ни один файл конфигурации компилятора не выбирается или не включается, определяет, когда компилятор полностью соответствует стандарту, или где заголовок пользователя (см. BOOST_USER_CONFIG), был добавлен к нему любые варианты, например, сгенерированный автоконфом сценарий настройки.

BOOST_NO_STDLIB_CONFIG

В случае определения стандартный файл конфигурации библиотеки не выбирается или не включается, определяет, когда стандартная библиотека полностью соответствует стандарту, или где заголовок пользователя (см. BOOST_USER_CONFIG) имеет любые дополнительные параметры, например, сгенерированный автоконфом сценарий настройки.

BOOST_NO_PLATFORM_CONFIG

При определении ни один файл конфигурации платформы не выбирается или не включается, определяет, когда платформа полностью соответствует стандарту (и не имеет полезных дополнительных функций), или где заголовок пользователя (см. BOOST_USER_CONFIG), имел какие-либо дополнительные параметры, необходимые для него, например, сгенерированный автоконфом сценарий настройки.

BOOST_NO_CONFIG

Эквивалентно к определению всех BOOST_NO_COMPILER_CONFIG, BOOST_NO_STDLIB_CONFIG и BOOST_NO_PLATFORM_CONFIG.

BOOST_STRICT_CONFIG

Нормальное поведение компиляторных версий, которые являются более новыми, чем последняя известная версия, заключается в том, что они имеют все те же дефекты, что и последняя известная версия. Настраивая это определение, то компиляторные версии, которые являются более новыми, чем последняя известная версия, предполагается полностью соответствовать стандарту. Это, вероятно, наиболее полезно для разработчиков или тестеров, а также для тех, кто хочет использовать импульс для тестирования бета-компиляторных версий.

BOOST_ASSERT_CONFIG

Когда этот флаг установлен, если настройка найдет что-то неизвестное, то он остановится с #error, а не продолжится. Проверители ускорения регрессии должны установить это определение, как и любой, кто хочет быстро проверить, поддерживается ли повышение на своей платформе.

BOOST_DISABLE_THREADS

При определении отключает поддержку потоков, даже если компилятор в текущем режиме перевода поддерживает несколько потоков.

BOOST_DISABLE_WIN32

При определении отключить использование Win32 конкретного API, даже если они доступны. Также имеет эффект установки BOOST_DISABLE_THREADS, если только BOOST_HAS_PTHREADS установлен. Эта опция может быть установлена автоматически системой настройки, когда она обнаруживает, что компилятор находится в «ограниченном режиме».

BOOST_DISABLE_ABI_HEADERS

Запрещает заголовки с включением любых заголовков префикса/суффикса, которые обычно контролируют такие вещи, как упаковка и выравнивание структуры.

BOOST_ABI_PREFIX

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

BOOST_ABI_SUFFIX

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

BOOST_ALL_DYN_LINK

Заставить все библиотеки, имеющие отдельный источник, быть связанными как библиотеки dll, а не статические библиотеки на Microsoft Windows (это макро используется для включения __declspec(dll import) модификаторы, так что компилятор знает, какие символы искать в dll, а не в статической библиотеке). Обратите внимание, что могут быть некоторые библиотеки, которые могут быть только статически связаны (например, Boost.Test) и другие, которые могут быть только динамически связаны (например,Boost.Thread), в этих случаях этот макрос не имеет эффекта.

BOOST_WHATEVER_DYN_LINK

Библиотека Сил "что бы" не было связано как dll, а не статическая библиотека на Microsoft Windows: заменить WHATEVER часть макро-имя на имя библиотеки, на которую вы хотите динамически ссылаться, например, использовать BOOST_DATE_TIME_DYN_LINK или BOOST_REGEX_DYN_LINK и т.д. (этот макрос используется для включения __declspec(dll import) модификаторы, чтобы компилятор знал, какие символы искать в dll, а не в статической библиотеке). Обратите внимание, что могут быть некоторые библиотеки, которые могут быть только статически связаны (например, Boost.Test) и другие, которые могут быть только динамически связаны (Boost.Thread, например), в этих случаях этот макрос не поддерживается.

BOOST_ALL_NO_LIB

говорит системе настройки не автоматически выбирать, на какие библиотеки ссылаться. Обычно, если компилятор поддерживает #pragma lib, то правильный вариант построения библиотеки будет автоматически выбран и связан с, просто путем включения одного из заголовков библиотеки. Этот макрос выключает эту функцию.

BOOST_WHATEVER_NO_LIB

говорит системе настройки не автоматически выбирать, какая библиотека будет ссылаться на библиотеку "в зависимости от того", заменить WHATEVER в макроимени именем библиотеки; например BOOST_DATE_TIME_NO_LIB или BOOST_REGEX_NO_LIB. Обычно, если компилятор поддерживает #pragma lib, то правильный вариант построения библиотеки будет автоматически выбран и связан с, просто путем включения одного из заголовков библиотеки. Этот макрос выключает эту функцию.

BOOST_LIB_DIAGNOSTIC

вызывает код автосвязи с выводными диагностическими сообщениями, указывающими имя библиотеки, которая выбрана для подключения.

BOOST_LIB_BUILDID

Если вы построили Boost, используя опцию -buildid, то установите этот макрос таким же значением, как вы перешли к bjam. Например, если вы построили с использованием bjam address-модель>3>3>18>64 -buildid34>amd64, то составите свой код с -DBOOST_LIB_BUILDID=amd64, чтобы убедиться, что правильные библиотеки выбраны по ссылке.

BOOST_LIB_TOOLSET

Перекрывает имя инструментария части названия библиотеки, с которой связана; обратите внимание, если это определено, это должно быть определено к цитируемой строковой буквальной строке, например, "abc".

Настраивая различные макросы на командную строку компилятора или редактируя , настройка наращивания может быть оптимизирована различными способами.

Конфигурация Boost структурирована таким образом, что настройка пользователя включена в первую очередь (по умолчанию , если BOOST_USER_CONFIG не определено). Это создает любую политику, определенную пользователем, и дает пользователю возможность влиять на то, что происходит дальше.

Затем включены компилятор, стандартная библиотека и конфигурационные файлы платформы. Они включены через макросы (BOOST_COMPILER_CONFIG и т.д., см. пользовательские настраиваемые макросы), и если соответствующий макрос неопределен, то для их установки включен отдельный заголовок, который определяет, какой компилятор/стандартная библиотека/платформа используется. Конфигурация может быть полностью проигнорирована, если установлен соответствующий BOOST_NO_XXX макрос (например, BOOST_NO_COMPILER_CONFIG для отключения, включая любой файл конфигурации компилятора - см. пользовательские настраиваемые макросы.

Наконец заголовок конфигурации, включает в себя ; этот заголовок содержит любой код конфигурации котельной пластины - например, где один набор бустера предполагает, что другой также должен быть установлен.

Следующие примеры использования представляют лишь несколько возможностей:

Давайте предположим, что мы создаем импульс с Visual C++ 6 и STLport 4.0. Предположим также, что мы не намерены обновлять наш компилятор или стандартную библиотеку в ближайшее время. Чтобы избежать нарушения зависимостей при обновлении, мы, возможно, хотим «заморозить» наши заголовки конфигурации, так что мы должны восстановить наш проект только в том случае, если сам код импульса изменился, а не потому, что настройка импульса была обновлена для более поздних версий Visual C++ или STLport. >>>>>>>>>>>2>>>>>3>>>>>3>>>>>>>>>3>>>>3>>>>>3>>>>>3>>>>>3>>>>>>>>>>>>>>>>>>>>>> Затем мы создадим собственный каталог конфигурации: boost/config/mysetup/, и скопируем файлы конфигурации там. Наконец, откройте и отредактируйте следующие определения:

#define BOOST_COMPILER_CONFIG "boost/config/mysetup/visualc.hpp"
#define BOOST_STDLIB_CONFIG "boost/config/mysetup/stlport.hpp"
#define BOOST_USER_CONFIG "boost/config/mysetup/win32.hpp"

Теперь, когда вы используете импульс, его заголовок конфигурации будет идти прямо к нашим «замороженным» версиям и игнорировать версии по умолчанию, вы теперь будете изолированы от любых изменений конфигурации при обновлении импульса. Этот метод также полезен, если вы хотите изменить некоторые файлы конфигурации импульса; например, если вы работаете с выпуском бета-компилятора, еще не поддерживаемым увеличением.

Предположим, что вы используете бустер с компилятором, который полностью соответствует стандарту; вы не заинтересованы в том, что у старых версий вашего компилятора могут быть ошибки, потому что вы знаете, что ваша текущая версия не нуждается в каких-либо настройках конфигурации макросов. В таком случае вы можете определить BOOST_NO_COMPILER_CONFIG либо на командной строке, либо в , и полностью упустить заголовок конфигурации компилятора (на самом деле вы упустите два заголовка, один из которых выясняет, что такое компилятор, и один, который настраивает на него повышение). Это имеет два последствия: во-первых, нужно собрать меньше кода, а во-вторых, удалить зависимость от двух заголовков.

Если вы работаете на неix-подобной платформе, то вы можете использовать сценарий настройки для создания «замороженной» конфигурации на основе текущей настройки компилятора - , используя сценарий настройки для более подробной информации.

Библиотека конфигурации импульса предоставляет полный набор программ регрессии тестовых программ в рамках /boost/config/ test/

Файл

Описание

config_info.cpp

Печатает подробное описание вашего компилятора/стандартной настройки библиотеки/платформы, а также текущую конфигурацию увеличения. Информация, предоставляемая этой программой, полезна для создания файлов конфигурации импульса. Если вы сообщаете, что повышение неправильно настроено для вашего компилятора/библиотеки/платформы, то, пожалуйста, включите выход из этой программы при представлении информации о требуемых изменениях.

config_test.cpp

монолитная программа тестирования, которая включает в себя большинство отдельных тестовых случаев. Это обеспечивает быструю проверку, чтобы увидеть, правильно ли настроен импульс для вашего компилятора/библиотеки/платформы.

limits_test.cpp

Испытания вашей стандартной библиотеки std::цифровые_ограничения реализация (или ее повышение при условии замены, если определено BOOST_NO_LIMITS). Этот тест-файл терпит неудачу с большинством версий numeric_limits, главным образом из-за того, как некоторые компиляторы относятся к NAN и бесконечности.

no_*pass.cpp

Отдельные файлы тестовых дефектов компилятора. Каждый из них должен компилироваться, если нет, то должны быть определены соответствующие макросы BOOST_NO_XXX - см. каждый тестовый файл для конкретных деталей.

no_*<32>файл.cpp

Отдельные файлы тестовых дефектов компилятора. Каждый из них не должен компилироваться, если он делает то соответствующий BOOST_NO_XXX макрос определяется, когда его не нужно - см. каждый тестовый файл для конкретных деталей.

has_*pass.cpp

Индивидуальные тестовые файлы. Если один из них не компилируется, то соответствующий макрос BOOST_HAS_XXX определяется, когда его не должно быть - см. каждый тестовый файл для конкретных деталей.

has_*фил.cpp

Индивидуальные тестовые файлы. Если один из них компилируется, то соответствующие макросы BOOST_HAS_XXX могут быть надежно определены - см. каждый тестовый файл для конкретных деталей.

Хотя вы можете запустить тесты регрессии конфигурации в качестве отдельных тестовых файлов, их довольно много, поэтому есть несколько коротких путей, которые помогут вам:

Если вы создали драйвер boost regression , то вы можете использовать это для создания приятного html отформатированного отчета о результатах с использованием поставляемого тестового файла.

В качестве альтернативы вы можете запустить такой сценарий настройки:

./конфигурация --доступна-тест

в этом случае сценарий будет тестировать текущую конфигурацию, а не создавать новую с нуля.

Если вы сообщаете результаты этих тестов для новой платформы/библиотеки/компилятора, то, пожалуйста, включите журнал полного вывода компилятора, выход из config_info.cpp, а также результаты тестирования спереди/выхода.

Последний пересмотр: 21 сентября 2016 года в 14:37:53 GMT


Next

Статья Boost.Config раздела Boost.Config может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 17:34:14/0.01090407371521/0