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 來進行編輯,而不要使用文書編輯軟體自行撰寫。