Язык Boost-build/BJam - проверка значения флага
Мне нужно отредактировать файл.jam, используемый boost-build для определенного вида проектов. Официальное руководство по языку BJAM гласит:
- Msvc - один из наборов инструментов, который заботится о файлах DEF. Следующая строка должна быть добавлена к нему. флаги msvc.link DEF_FILE;
- Поскольку переменная 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" ;
}