Как мне заставить bjam увеличиваться, чтобы он строился чисто и последовательно?

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

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


person Christopher Dorian    schedule 18.04.2011    source источник
comment
У меня все еще есть эта проблема (2015 г.). b2 --clean, b2 --clean-all, bjam --clean и т. д. ни один из них не работает.   -  person thang    schedule 17.08.2015


Ответы (5)


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

person usta    schedule 05.05.2011
comment
Это не то же самое, что чистое. После очистки я могу собрать половину проекта, исправить ошибку компиляции, а затем построить вторую половину. С -a мне нужно дважды построить первую половину. - person Adam Trhon; 11.07.2013

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

person Riot    schedule 01.05.2014
comment
ссылка сейчас не работает - person Bogdan; 17.11.2020

Сообщение

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
person Paul A. Bristow    schedule 14.11.2016

Для справки:

  1. bjam --clean убрать.
  2. зайдите в папку bin.v2 и при необходимости удалите файл кеша проекта
person Rik    schedule 03.10.2014

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

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

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

32-бит: да (кешируется)

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

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

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

person Daniel S    schedule 20.06.2016