BOO入门/使用Boo编译器

BOO入门 > 使用Boo编译器 (上一章:鸭子类别型 下一章:Boo专案的架构)


Boo 编译器典型的使用方法: booc <选项> <档案>

命令列选项 编辑

选项 说明/描述
-v 显示详细的讯息
-vv 显示更详细的讯息
-vvv 显示超详细的讯息
-r:<reference_name> 增加组件参考
-t:<type_name_to_generate> 产生的档案类型:要制作可执行档的话,请指定 exe 或 winexe﹔要制作函式库(组件)的话,请指定 library。
-p:<pipeline> 在编译时增加步骤 <pipeline>。
-c:<culture> 指定要使用哪一个 CultureInfo。
-o:<output_file> 指定输出档案名称。
-srcdir:<source_files> 告知编译器哪儿可以找到源代码档案。(指定路径)
-debug 增加侦错资讯,在开发时期很有用。 (预设)
-debug- 不要增加侦错资讯,在正式要产出、发布时使用。
-debug-steps 在每个编译步骤之后,显示 AST。(译注:主要给 Boo 开发者使用,如果你有兴趣研究的话,也可以打开来看看。)
-resource:<resource_file>,<name> 增加资源档。<name> 可以不用指定。
-embedres:<resource_file>,<name> 增加内嵌资源档。<name> 可以不用指定。

所以,举例来说,为了要编译你的数据库代码,所以需要函式库:System.Data.dll,那么,你需要输入:

booc -r:System.Data.dll -o:Database.dll -t:library Database.boo

这样就会产生一个名为 Database.dll 的函式库(组件)。

使用NAnt 编辑

当你的专案很大,有很多档案或函式库的时候,使用 NAnt 来进行会比较容易管理。NAnt 是一个免费的 .NET build 工具。

以上节的例子,要同样产生 Database.dll 的话,你需要建立一个 build 档案,并命名为 default.build:

<?xml version="1.0" ?>

<project name="Goomba" default="build">
  <target name="build" depends="database" />
  <target name="database">
    <mkdir dir="bin" />
    <booc output="bin/Database.dll" target="library">
      <references basedir="bin">
        <include name="System.Data.dll" />
      </references>
      <sources>
        <include name="Database.boo" />
      </sources>
    </booc>
  </target>
</project>

译注:你可能还需要在 <mkdir> 之后,加上 <loadtasks assembly="Boo.NAnt.Tasks.dll" />,让 NAnt 载入 Boo.NAnt.Tasks.dll 这个 task。

执行

$ nant
NAnt 0.85 (Build 0.85.1869.0; rc2; 2/12/2005)
Copyright (C) 2001-2005 Gerry Shaw
http://nant.sourceforge.net

Buildfile: file:///path/to/default.build
Target framework: Microsoft .NET Framework 1.1
Target(s) specified: build

build:

database:

     [booc] Compiling 1 file(s) to /path/to/bin/Database.dll.

BUILD SUCCEEDED

Total time: 0.2 seconds.

很简单的一件事情,却需要建立一个看来复杂的 build 档案,值得吗?不过在管理许多档案时,你将会发现它很容易进行扩充与管理。此外,在变更原始档案以后,你也不需要打一长串的 booc 指令来进行编译。

在 build 档案里,最重要的部分在于 <booc> 一节,NAnt 会将这里指定的选项转送给编译器。你可以指定的属性如下:

属性 说明/描述
target 输出型态:library、exe 或 winexe。可以不用指定,预设为 exe。
output 输出组件的名称,一定要指定。
pipeline 对应到上节提到的 -p 选项,指定在编译时要使用的步骤型别。可以不用指定。
tracelevel 启始编译器追踪,在进行除错时很有用。可使用的选项:Off, Error, Warning, Info, Verbose。可以不用指定,预设为 Off。

我想你只会用到 target 与 output,在 <booc> 里面可用的节点,有三种:

可用节点 说明/描述
<sources> 源代码档案,必须指定。
<references> 组件参考。
<resources> 内嵌资源。

就像范例一样,在这些节点里面,你需要再放置 <include />。

这里提到的仅仅是 NAnt 的概要,要取得更多资讯的话,可以参访NAnt 官方网站

使用msbuild 编辑

这一节是补充章节。微软之后推出了自己的 build 工具,称为 msbuild(在 Mono 里,称为 xbuild)。使用此工具最大的好处在于可以直接编译以 Visual Studio.Net/SharpDevelop/MonoDevelop 开发环境建立的 solution/project 档案。

同样地,也能使用 Boo,只要在档案里面汇入 <Import Project="$(BooBinPath)\Boo.Microsoft.Build.targets" /> 即可使用。以下的 build 档案,同样也是产生 Database.dll:

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ProjectGuid>{2F537A45-B60F-4E73-808E-608D38082006}</ProjectGuid>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <OutputType>Library</OutputType>
    <RootNamespace>Database</RootNamespace>
    <AssemblyName>Database</AssemblyName>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <OutputPath>bin\Debug\</OutputPath>
    <DebugSymbols>True</DebugSymbols>
    <DebugType>Full</DebugType>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <OutputPath>bin\Release\</OutputPath>
    <DebugSymbols>False</DebugSymbols>
    <DebugType>None</DebugType>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System.Data" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Database.boo" />
  </ItemGroup>
  <Import Project="$(BooBinPath)\Boo.Microsoft.Build.targets" />
</Project>

建议使用 Visual Studio.Net (express)、SharpDevelop、MonoDevelop 来进行编辑,而不要使用文书编辑软件自行撰写。