我试图学习如何使用boost build。对于初学者,我想在xsd文件上运行codesynthesis xsd工具来生成c ++代码。此工具将一个文件作为输入并生成多个输出文件。我很难找到如何通过boost构建来实现这一点,而且我找不到任何与我想要做的非常类似的例子。谁能在这里提供一些见解?我在下面附上了我的代码。谢谢!
import path ;
import type ;
import generators ;
type.register XSD : xsd ;
generators.register-standard xsd.compilexsd : XSD : CPP ;
module xsd
{
actions compilexsd
{
xsd cxx-tree \
--show-sloc \
--generate-doxygen \
--generate-forward \
--generate-serialization \
--output-dir [path.parent($(<))] \
$(>)
}
}
exe app : main.cpp test.xsd ;
答案 0 :(得分:0)
在尝试从结构规范生成代码时,我在七年前遇到了几乎完全相同的问题。 Boost.Build允许声明单个文件的直接转换。
例如:
.y --> .cpp --> .obj
然而,没有语法来表达更复杂的依赖树,其中单个spec文件生成一整套.cpp文件。解决方法是执行以下操作:
定义一个列出所有生成的文件名的库 (这意味着您必须手动保持这个愚蠢的列表最新)
定义&#34; prebuild&#34;在作为依赖项的子项目中的规则。这样,发电机总是先运行:
ALWAYS prebuildcmd ;
PREBUILD_CMD = "your-generator arg arg arg" ;
rule Prebuild
{
local output = [ SHELL "$(PREBUILD_CMD)" ] ;
ECHO $(output) ;
}
Prebuild prebuildcmd ;
(这意味着脚本不是正常依赖项的一部分,必须足够聪明,不要标记未更改的文件)