![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Boost.ConfigBoost , Boost.Config ,
|
![]() |
Important |
---|---|
Этот скрипт конфигурации только настраивает заголовки Boost для использования с конкретным компилятором. Это не влияет на рост. Постройте или как строятся библиотеки. |
Если вы знаете, что ускорение неправильно настроено для вашей конкретной настройки, и вы находитесь на платформе, подобной UNIX, то вы можете попытаться улучшить ситуацию, запустив скрипт настройки ускорения. Из командной строки оболочки вам нужно будет перейти в/libs/config/
>и набрать:
<
sh./configure
>
Вы увидите список предметов, которые проверяются, когда сценарий проходит регрессионные тесты. Обратите внимание, что скрипт настройки автоматически определяет компилятор только в том случае, если он называется g++, c++ или CC. Если вы используете какой-либо другой компилятор, вам необходимо установить одну или несколько из следующих переменных среды:
переменный |
Описание |
---|---|
CXX |
Имя компилятора, например< |
CXXFLAGS |
Флаги компилятора для использования, например< |
ЛДФЛАГ |
Флаги линкера для использования, например< |
Либс |
Любые библиотеки для подключения, например< |
Например, для запуска скрипта конфигурации с 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
>- расположенный в каталоге/libs/config/
>.Обратите внимание, что конфигурация не устанавливает этот заголовок в ваш усилитель, включая путь по умолчанию. Этот заголовок содержит все опции, генерируемые скриптом конфигурации, а также секцию заголовка, которая содержит параметры настройки пользователя из версии по умолчанию/boost/config/
>). Есть два способа использовать этот заголовок:
/boost/config/
>так, чтобы он заменял по умолчанию user.hpp, предоставляемый бустером. Эта опция допускает только одну настройку, сгенерированную конфигурацией; разработчики бустеров должны избегать этой опции, так как она несет опасность случайного внесения модифицированного конфигурациейBOOST_USER_CONFIG
>, чтобы указать на него. Например, создать новую подкаталог/boost/config/
><user/
>и скопировать заголовок там; например, как<multithread-gcc-config.hpp
>. Затем при компиляции добавьте опцию командной строки:<-DBOOST_USER_CONFIG="<boost/config/user/multithread-gcc-config.hpp>"
>, и бустер будет использовать новый заголовок конфигурации. Эта опция позволяет генерировать более одного заголовка конфигурации и держать их отдельно от источника усиления, чтобы обновления источника не мешали вашей конфигурации.Есть несколько вариантов конфигурации, которые представляют собой выбор пользователя, а не дефекты компилятора или конкретные параметры платформы. Они указаны в<<boost/config/user.hpp>
>и в начале заголовка, сгенерированного конфигурацией<user.hpp
>. Вы можете определить их в командной строке или путем редактирования<<boost/config/user.hpp>
>, они перечислены в следующей таблице:
Макро |
Описание |
---|---|
< |
При определении он должен указывать имя файла конфигурации пользователя для включения перед любыми файлами конфигурации усиления. Когда не определено, по умолчанию< |
< |
При определении он должен указывать имя используемого файла конфигурации компилятора. Определение этого исключает логику выбора компилятора и устраняет зависимость от заголовка, содержащего эту логику. Например, если вы используете gcc, то вы можете определить BOOST_COMPILER_CONFIG< |
< |
При определении он должен указывать имя стандартного файла конфигурации библиотеки для использования. Определение этого вырезает стандартную логику выбора библиотеки и устраняет зависимость от заголовка, содержащего эту логику. Например, если вы используете STLport, то вы можете определить< |
< |
При определении он должен указывать имя используемого файла конфигурации платформы. Определение этого исключает логику выбора платформы и устраняет зависимость от заголовка, содержащего эту логику. Например, если вы компилируете на Linux, то вы можете определить< |
< |
При определении ни один файл конфигурации компилятора не выбирается или не включается, не определяет, когда компилятор полностью соответствует стандарту или где заголовок пользователя (см.< |
< |
При определении не выбирается или не включается стандартный файл конфигурации библиотеки, не определяется, когда стандартная библиотека полностью соответствует стандарту, или где в заголовке пользователя (см.< |
< |
При определении не выбирается и не включается файл конфигурации платформы, определяется, когда платформа полностью соответствует стандарту (и не имеет полезных дополнительных функций), или когда в заголовке пользователя (см.< |
< |
Эквивалентно определению всех< |
< |
Нормальным поведением для версий компилятора, которые являются более новыми, чем последняя известная версия, является предположение, что они имеют все те же дефекты, что и последняя известная версия. Установив это определение, можно предположить, что версии компилятора, которые являются более новыми, чем последняя известная версия, полностью соответствуют стандарту. Это, вероятно, наиболее полезно для разработчиков или тестировщиков, а также для тех, кто хочет использовать бустер для тестирования версий бета-компилятора. |
< |
Когда этот флаг установлен, если конфигурация находит что-то неизвестное, то она остановится с ошибкой, а не продолжится. Тестировщики ускоренной регрессии должны установить это определение, как и любой, кто хочет быстро проверить, поддерживается ли импульс на их платформе. |
< |
При определении отключается поддержка потоков, даже если компилятор в его текущем режиме трансляции поддерживает несколько потоков. |
< |
При определении отключается использование API-интерфейсов Win32, даже если они доступны. В этом случае< |
< |
Препятствует включению любых префиксов/суффиксов, которые обычно управляют такими вещами, как упаковка структуры и выравнивание. |
< |
Заголовок префикса для включения вместо любого усиления. Конфигурация обычно выбирает, любая замена должна настраивать параметры упаковки структуры и выравнивания по мере необходимости. |
< |
Заголовок суффикса для включения вместо любого усилителя. Конфигурация обычно выбирает, любая замена должна отменить эффекты заголовка префикса. |
< |
Вынуждает все библиотеки, имеющие отдельный источник, быть связанными как библиотеки dll, а не статические библиотеки в Microsoft Windows (этот макрос используется для включения модификаторов< |
< |
Вынуждает библиотеку «что угодно» быть связанной как dll, а не статическая библиотека в Microsoft Windows: заменить частьWHATEVERна имя библиотеки, на которую вы хотите динамически ссылаться, например, использовать< |
< |
Сообщает системе конфигураций не автоматически выбирать, против каких библиотек ссылаться. Обычно, если компилятор поддерживает #pragma lib, то правильный вариант сборки библиотеки будет автоматически выбран и связан с ним, просто включив один из заголовков этой библиотеки. Этот макрос отключает эту функцию. |
< |
Сообщает системе конфигураций не автоматически выбирать, какую библиотеку связать с библиотекой «что угодно», заменитьWHATEVERв макро-имени на имя библиотеки; например< |
< |
Вызывает автоматическое связывание кода с выводом диагностических сообщений, указывающих название библиотеки, выбранной для связывания. |
< |
Если вы построили Boost с помощью опции< |
< |
Переопределяет название набора инструментов части названия библиотеки, связанного с; примечание, если определено, это должно быть определено к цитируемой строке буквально, например «abc». |
Устанавливая различные макросы в командной строке компилятора или редактируя
Конфигурация Boost структурирована таким образом, что сначала включается конфигурация пользователя (по умолчаниюBOOST_USER_CONFIG
>не определено). Это настраивает любые пользовательские политики и дает возможность пользовательской конфигурации влиять на то, что произойдет дальше.
Далее включены компилятор, стандартная библиотека и файлы конфигурации платформы. Они включаются через макросы (<BOOST_COMPILER_CONFIG
>и т.д.,см. макросы, устанавливаемые пользователем), и если соответствующий макрос не определен, то для их установки включается отдельный заголовок, который определяет, какой компилятор/стандартная библиотека/платформа используется. Конфигурацию можно заставить полностью игнорировать эти заголовки, если установлен соответствующий макрос<BOOST_NO_XXX
>(например,<BOOST_NO_COMPILER_CONFIG
>для отключения включения любого файла конфигурации компилятора -см. макросы, устанавливаемые пользователем).
Наконец, заголовок конфигурации бустера включает в себя
Следующие примеры использования представляют лишь некоторые из возможностей:
Давайте предположим, что мы развиваем Visual C++ 6 и STLport 4.0. Предположим также, что в ближайшее время мы не намерены обновлять наш компилятор или стандартную библиотеку. Чтобы избежать разрыва зависимостей при обновлении, мы, возможно, захотим «заморозить» наши заголовки конфигурации, так что нам придется перестраивать наш проект только в том случае, если сам код повышения изменился, а не потому, что конфигурация повышения была обновлена для более поздних версий Visual C++ или STLport. Начнем с понимания того, что используемые файлы конфигурации:<<boost/config/compiler/visualc.hpp>
>для компилятора,<<boost/config/stdlib/stlport.hpp>
>для стандартной библиотеки и<<boost/config/platform/win32.hpp>
>для платформы. Далее мы создадим собственный каталог конфигурации<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
>либо в командной строке, либо в
Если вы работаете на Unix-подобной платформе, то вы можете использовать скрипт конфигурации для создания «замороженной» конфигурации на основе вашей текущей настройки компилятора -см.
Библиотека конфигураций бустера предоставляет полный набор программ регрессионного тестирования в подкаталоге/boost/config/
><test/
>:
Файл |
Описание |
---|---|
< |
Распечатывает подробное описание настройки компилятора/стандартной библиотеки/платформы, а также текущую конфигурацию усиления. Информация, предоставленная этой программой, полезна при настройке файлов конфигурации усиления. Если вы сообщаете, что импульс неправильно настроен для вашего компилятора/библиотеки/платформы, пожалуйста, включите вывод из этой программы, сообщая о необходимых изменениях. |
< |
Монолитическая программа испытаний, которая включает в себя большинство отдельных тестовых случаев. Это обеспечивает быструю проверку, чтобы увидеть, правильно ли настроен импульс для компилятора / библиотеки / платформы. |
< |
Проверяет реализацию стандартной библиотеки< |
< |
Отдельные файлы проверки дефектов компилятора. Каждый из них должен компилироваться, если нет, то необходимо определить соответствующий макрос< |
< |
Отдельные файлы проверки дефектов компилятора. Каждый из них не должен компилироваться, если он это делает, то соответствующий< |
< |
Отдельные тестовые файлы. Если один из них не компилирует, то соответствующий< |
< |
Отдельные тестовые файлы. Если один из них действительно компилирует, то можно безопасно определить соответствующий< |
Хотя вы можете запускать тесты регрессии конфигурации в качестве отдельных тестовых файлов, их довольно много, поэтому есть несколько ярлыков, которые помогут вам:
Если вы создалидрайвер ускорения регрессии, то вы можете использовать его для создания хорошего html-форматированного отчета о результатах с использованием предоставленного тестового файла.
В качестве альтернативы вы можете запустить скрипт конфигурации, как это:
<
./configure --enable-test
>
В этом случае сценарий будет тестировать текущую конфигурацию, а не создавать новую с нуля.
Если вы сообщаете о результатах этих тестов для новой платформы/библиотеки/компилятора, то, пожалуйста, включите журнал полного вывода компилятора, выход из<config_info.cpp
>и результаты теста на пропуск/отказ.
Последний пересмотр: 21 сентября 2016 года в 14:37:53 GMT |
Статья Boost.Config раздела Boost.Config может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: ::
реклама |