Как заставить BJAM в Boost строить аккуратно и последовательно? - PullRequest
15 голосов
/ 19 апреля 2011

Есть ли способ заставить bjam строить аккуратно и последовательно?Это кажется довольно случайным, когда он решает восстановить мои библиотеки и когда он решает просто скопировать их откуда-то.

Я пробовал bjam --clean-all и bjam --clean, но все же, кажется,найдите нужные файлы и вместо перекомпиляции просто скопируйте их в мою папку stage / lib.

Ответы [ 5 ]

13 голосов
/ 05 мая 2011

Чтобы восстановить безоговорочно, передайте флаг -a в bjam.

7 голосов
/ 01 мая 2014

Вы можете использовать bjam --clean.Полные инструкции по вызову для b2: здесь .

5 голосов
/ 14 ноября 2016

Сообщение

32-bit: yes

вводит в заблуждение.

Это означает только то, что компилятор по умолчанию (часто msvc) имеет 32-битную версию доступно .

Это НЕ означает, что сгенерированный код не предназначен для 64-битной цели (если вы поставите address-model=64).

--reconfigure очищает кеш и гарантирует, что вы получите некэшированное значение (которое по-прежнему будет 32-разрядным, если в качестве компилятора по умолчанию используется msvc).

И будьте осторожны: чтобы получить полностью чистую сборку после изменения установленных функций компилятора, обычно из обновления, вы также должны удалить несколько кэшированных версий vcvarsall.bat в C:\Users\The_User\AppData\Local\Temp (VS2015 обновление 3 и очень вероятно обновление 5, когда расположение многих системных файлов планируется изменить, и, следовательно, макросы определяются как vcvarsall.bat).

Вот такие имена:

b2_msvc_14.0_vcvarsall_amd64.cmd
...

Подтверждение создания чистой копии этих файлов выглядит следующим образом:

I:\modular-boost\libs\hello_boost\example>b2 -a toolset=msvc-14.0
CRT_IncludePath_x64 =  C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt using msvc
...found 1 target...
...updating 1 target...
msvc.write-setup-script C:\Users\paula\AppData\Local\Temp\b2_msvc_14.0_vcvarsall_x86.cmd
...updated 1 target...
...found 1 target...
...updating 1 target...
msvc.write-setup-script C:\Users\paula\AppData\Local\Temp\b2_msvc_14.0_vcvarsall_amd64.cmd
...updated 1 target...
...found 1 target...
...updating 1 target...
msvc.write-setup-script C:\Users\paula\AppData\Local\Temp\b2_msvc_14.0_vcvarsall_x86_arm.cmd
...updated 1 target...

Если у вас нет чистой копии, будет использоваться «кэшированная» версия vsvarsall.bat, возможно, для создания жестоко запутанных сообщений о файлах, которые существуют, например:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\crtdefs.h(10): fatal error C1083: Cannot open include file: 'corecrt.h': No such file or directory
4 голосов
/ 03 октября 2014

Для справки:

  1. bjam --clean для очистки.
  2. перейдите в папку bin.v2 и при необходимости удалите файл кэша проекта
3 голосов
/ 20 июня 2016

bjam -a и bjam --clean (только), кажется, очищают промежуточные файлы и получающиеся двоичные файлы, но не конфигурацию сборки - согласно руководству это непреднамеренно:

Результаты конфигурации кэшируются - если вы попытаетесь пересобрать с другими параметрами компилятора, то добавьте «-a» в командную строку bjam, чтобы принудительно перестроить все цели.

Пример (с бустом 1.61 и многими предыдущими выпусками): Когда я строю с address-model=32, затем запускаю его снова с 64, он говорит мне:

32-разрядный: да (кэшируется)

Другими словами, bjam предпочитает кэшированные значения опциям, которые я передаю. Всегда. -a и --clean не меняют это неортодоксальное (ошибочное?) Поведение.

Следовательно, всякий раз, когда вы изменяете параметры, переданные в bjam, вероятно, будет хорошей идеей удалить файл кэша (как упоминал Рик) перед сборкой. Таким образом, мой скрипт сборки выглядит примерно так:

rm -f 'bin.v2/project-cache.jam' ./bjam -a $options [...]

...