2013年2月10日日曜日

[Ant]C コンパイル

  • Windows の cygwin で gcc を使用する場合はパスの問題で cygwin の bash 上ではうまく動作しない。Windows 標準のコマンドプロンプトで gcc を実行する場合は cygwin/bin に gcc-3.exe というファイルがあるので gcc.exe という名前でコピーして gcc を実行できるようにしておく。
  • ANT Build Guide を参考に C++ のコンパイルができるよう Ant-Contrib を入手する。
  • Java SDK がない場合は Java SE Downloads から JDK をダウンロードする。
  • ant を使用するときに \Program Files\ 以下に tools.jar がないと言われる場合は、JDK をインストールしたディレクトリの lib 以下に tools.jar があるのでそれを指定のディレクトリにコピーしておく。
  • ダウンロードした ant-contrib の cpptasks で ant を実行し cpptasks.jar を作成する。cpptasks.jar は cpptasks-x.xx\target\lib に作成される。
  • cpptasks.jar を Ant の lib ディレクトリにコピーする。
  • cpptasks-x.xx\src\samples\hello で ant を実行しコンパイルできることを確認する。
  • ソースを作成するディレクトリ以下に src ディレクトリを作る。今回は ant_test というディレクトリで作成する。
    ant_test
        +--- src/
        |     +-- hello.c
              +--- build.xml
    
    Example: hello.c
    #include <stdio.h>
    int main(void)
    {
      printf("Hello, world\n");
      return 0;
    }
    
    Example: build.xml
    <?xml version="1.0"?>
    <project name="HelloWorld" basedir="." default="all">
      <taskdef resource="cpptasks.tasks"/>
      <property name="build.dir" value="build"/>
      <property name="dist.dir" value="dist"/>
      <property name="src.dir" value="src"/>
      <target name="init">
        <mkdir dir="${build.dir}"/>
        <mkdir dir="${dist.dir}"/>
      </target>
      <target name="clean">
        <delete dir="${build.dir}"/>
        <mkdir dir="${build.dir}"/>
        <delete dir="${dist.dir}"/>
        <mkdir dir="${dist.dir}"/>
      </target>
      <target name="compile" depends="init">
        <cc outtype="executable" subsystem="console" outfile="${dist.dir}/hello" objdir="${build.dir}">
          <fileset dir="${src.dir}" includes="*.c"/>
        </cc>
      </target>
      <target name="all" depends="init,clean,compile"/>
    </project>
    
  • コンパイラに cc を指定できるように次のように記述しておくことを忘れないようにする。
    <taskdef resource="cpptasks.tasks"/>
    
  • コンパイルは ant を実行すれば default で指定されている all が実行され、init, clean, compile が実行される。
  • dist, build などのディレクトリを作成しない場合は以下のように build.xml を記述できる。
    <?xml version="1.0"?>
    <project name="authAdminServiceStart" basedir="." default="all">
      <taskdef resource="cpptasks.tasks"/>
      <property name="obj.dir" value="."/>
      <property name="src.dir" value="."/>
      <target name="init">
      </target>
      <target name="clean">
        <delete>
          <fileset dir="." includes="*.o,*.exe"/>
        </delete>
      </target>
      <target name="compile" depends="init">
        <cc outtype="executable" subsystem="console" outfile="test" objdir="${obj.dir}">
          <fileset dir="${src.dir}" includes="*.cpp"/>
        </cc>
      </target>
      <target name="all" depends="init,compile"/>
    </project>
    

0 件のコメント:

コメントを投稿