我需要为特定类型的项目编辑boost-build使用的.jam文件。关于BJAM语言的官方手册说:
- 关注DEF文件的其中一个工具集是msvc。应添加以下行。 flags msvc.link DEF_FILE ;
- 由于msvc.link操作不使用DEF_FILE变量,我们需要将其修改为:actions link bind DEF_FILE {$(。LD).... / DEF:$(DEF_FILE)....}注意绑定DEF_FILE部分。它告诉bjam 将DEF_FILE中的内部目标名称转换为相应的名称 链接中的文件名
醇>
显然只是用ECHO打印DEF_FILE是行不通的。如何将其扩展为字符串变量或实际可以检查的内容?
我需要做的是打印错误消息并在未设置标志的情况下中止构建。我试过了:
if ! $(DEF_FILE)
{
errors.user-error "file not found" ;
EXIT ;
}
但是这个“如果”总是如此
我也尝试将“if!$ _DEF_FILE {...}”放在包含的“actions”中,但显然它被忽略了。
答案 0 :(得分:1)
我不确定我理解你的全球任务。但是,如果要添加对非空DEF_FILE的检查 - 扩展您引用的文档位,则需要在msvc.link函数中添加检查。
如果您有命令行模式(使用'actions'指定),则其内容将传递给OS以供执行。但是,您还可以使用具有相同名称的函数,该函数将在生成操作之前调用。例如,以下是当前代码库的内容:
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" ;
}