Язык Boost-build/BJam - проверка значения флага

Мне нужно отредактировать файл .jam, используемый boost-build для определенного типа проектов. В официальном руководстве по языку BJAM говорится:

  1. Одним из наборов инструментов, который заботится о файлах DEF, является msvc. К нему следует добавить следующую строку. флаги msvc.link DEF_FILE ;
  2. Поскольку переменная DEF_FILE не используется действием msvc.link, нам нужно изменить ее следующим образом: связать часть DEF_FILE. Он говорит bjam преобразовать внутреннее имя цели в DEF_FILE в соответствующее имя файла в ссылке.

Так что, очевидно, просто напечатать DEF_FILE с ECHO не получится. Как его можно расширить до строковой переменной или чего-то, что действительно можно проверить?

Что мне нужно сделать, так это напечатать сообщение об ошибке и прервать сборку, если флаг не установлен. Я пытался:

if ! $(DEF_FILE)
{
    errors.user-error "file not found" ;
    EXIT ;
}

но это "если" всегда верно

Я также пытался поместить «if ! $_DEF_FILE {...}» внутри содержащихся «действий», но, по-видимому, это игнорируется.


person Daniel    schedule 26.07.2012    source источник


Ответы (1)


Я не уверен, что понимаю вашу глобальную задачу. Однако, если вы хотите добавить проверку на наличие непустого DEF_FILE, расширяя часть документации, которую вы цитируете, вам нужно добавить проверку в функции msvc.link.

Если у вас есть шаблон командной строки (указанный с помощью «действий»), его содержимое — это то, что передается ОС для выполнения. Но у вас также может быть функция с тем же именем, которая будет вызываться перед генерацией действий. Например, вот что есть в текущей кодовой базе:

rule link.dll ( targets + : sources * : properties * )
{
    DEPENDS $(<) : [ on $(<) return $(DEF_FILE) ] ;
    if <embed-manifest>on in $(properties)
    {
        msvc.manifest.dll $(targets) : $(sources) : $(properties) ;
    }
}

Вы можете изменить этот код, чтобы дополнительно:

if ! [ on $(<) return $(DEF_FILE) ] {
       ECHO "error" ;
}
person Vladimir Prus    schedule 28.07.2012