Ответ 1
Для безоговорочной перестройки переместите флаг -a
на bjam
.
Есть ли способ заставить bjam строить аккуратно и последовательно? Это кажется довольно случайным, когда он решает восстановить мои библиотеки и когда он решает просто скопировать их откуда-то.
Я пробовал bjam --clean-all
и bjam --clean
, но он все еще находит нужные файлы и вместо перекомпиляции просто копирует их в мою папку stage/lib
.
Для безоговорочной перестройки переместите флаг -a
на bjam
.
Вы можете использовать bjam --clean
. Полное описание вызова для b2 здесь.
Сообщение
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
В качестве справки:
bjam --clean
для очистки. 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 [...]