使用CodeSynthesis XSD增强构建v2

时间:2014-08-11 19:17:28

标签: c++ xsd bjam boost-build

我试图学习如何使用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 ;

1 个答案:

答案 0 :(得分:0)

在尝试从结构规范生成代码时,我在七年前遇到了几乎完全相同的问题。 Boost.Build允许声明单个文件的直接转换。

例如:

 .y --> .cpp --> .obj

然而,没有语法来表达更复杂的依赖树,其中单个spec文件生成一整套.cpp文件。解决方法是执行以下操作:

  1. 定义一个列出所有生成的文件名的库 (这意味着您必须手动保持这个愚蠢的列表最新)

  2. 定义&#34; prebuild&#34;在作为依赖项的子项目中的规则。这样,发电机总是先运行:

    ALWAYS prebuildcmd ;
    PREBUILD_CMD = "your-generator arg arg arg" ;
    
    rule Prebuild 
    {
        local output = [ SHELL "$(PREBUILD_CMD)" ] ;
        ECHO $(output) ;
    }
    
    Prebuild prebuildcmd ;
    

    (这意味着脚本不是正常依赖项的一部分,必须足够聪明,不要标记未更改的文件)