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

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

  1. Msvc - один из наборов инструментов, который заботится о файлах DEF. Следующая строка должна быть добавлена ​​к нему. флаги msvc.link DEF_FILE;
  2. Поскольку переменная DEF_FILE не используется действием msvc.link, нам необходимо изменить его следующим образом: привязка ссылки действия DEF_FILE { $(.LD) .... /DEF:$(DEF_FILE) .... } Обратите внимание на связать часть DEF_FILE. Он говорит bjam перевести внутреннее целевое имя в DEF_FILE на соответствующее имя файла в ссылке

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

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

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

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

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

1 ответ

Решение

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

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

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" ;
}
Другие вопросы по тегам