Как заставить bjam в boost строить чисто и последовательно?

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

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

Ответы

Ответ 1

Для безоговорочной перестройки переместите флаг -a на bjam.

Ответ 2

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

Ответ 3

Сообщение

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

В качестве справки:

  • bjam --clean для очистки.
  • перейдите в папку bin.v2 и удалите файл кэша проекта

Ответ 5

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

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

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

32-бит: да (кешировано)

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

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

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