ACE Tutorial 005
On the road to a multithreaded server


さて、始める前にまずMakefileを見てもらおう


#----------------------------------------------------------------------------
#  $Id$
#----------------------------------------------------------------------------

#----------------------------------------------------------------------------
#  Local macros
#----------------------------------------------------------------------------

# ACE のどのサンプルプロジェクトでも Makefile がテストやライブラリ指定のために用いられているのを
# 見付けることができるだろう。このファイルもそのようなサンプルから持って来たものだ。

  # 作成したいバイナリの名前を定義する。同じ名前の CPP ファイル $(BIN).cpp が
  # 存在するべきだが、その中に main() が定義されている必要はない。
  # まあ、大抵の場合は書いてあるものだけど。
BIN    = server

  # いくつかのアプリケーションは一つのソースファイルだけでできている。
  # FILES マクロを使って、コンパイルすべきファイルのリストを管理することにする。
  # ここで BIN と同様にファイルの拡張子を省略できることに注意してほしい。
FILES  =
FILES += client_handler

  # BUILD マクロは ACE のメイクファイルから利用される。
  # 通常はシステムがビルドを要求していることを示す。
  # 私は VBIN が BIN の値から生成される何かだとしか知らないが、とりあえずこのまま書いておく。
BUILD  = $(VBIN)

  # ここで SRC マクロを準備するために GNU make のいくつかの拡張機能を利用する。
  # 一般的には BIN と FILES の各項目の後ろに .cpp を付加すればよい。
SRC = $(addsuffix .cpp,$(BIN)) $(addsuffix .cpp,$(FILES))

  # このマクロは下のインデントされたターゲット中で使っている。
  # これは標準的な ACE の設定ではないので、いらない時は外してよい。
HDR = *.h

#----------------------------------------------------------------------------
#  Include macros and targets
#----------------------------------------------------------------------------

  # ここに真の力がある!
  # ここでインクルードしている makefile は ACE における C++ テンプレートの
  # ようなものだ。これらはインクルードするだけで非常に多くの仕事をしてくれる。
  # 実際、私はこれらのファイルをインクルードした "app.mk"ファイル一つしか作っていない。
  # このプロジェクトのメイクファイルは app.mk をインクルードするだけで十分となる。

include  $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU
include  $(ACE_ROOT)/include/makeinclude/macros.GNU
include  $(ACE_ROOT)/include/makeinclude/rules.common.GNU
include  $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU
include  $(ACE_ROOT)/include/makeinclude/rules.bin.GNU
include  $(ACE_ROOT)/include/makeinclude/rules.local.GNU

#----------------------------------------------------------------------------
#  Local targets
#----------------------------------------------------------------------------

  # 私は時々コードを読みやすくするために整形し直すことがある。
  # これは往々にして他のことよりも有用である。
  # 不幸にして indent プログラムは C++ を完全には把握してくれないので
  # その出力を若干変更しなければならない。
Indent : #
  for i in $(SRC) $(HDR) ; do \
    indent -npsl -l80 -fca -fc1 -cli0 -cdb < $$i | \
      sed -e 's/: :/::/g'  \
          -e 's/^.*\(public:\)/\1/' \
          -e 's/^.*\(protected:\)/\1/' \
          -e 's/^.*\(private:\)/\1/' \
          -e 's/:\(public\)/ : \1/' \
          -e 's/:\(protected\)/ : \1/' \
          -e 's/:\(private\)/ : \1/' \
      > $$i~ ;\
    mv $$i~ $$i ;\
  done

  # ACE のメイクファイル中のターゲットの一つに depend がある。
  # これはコンパイラを(コードの)依存関係リストを生成するために起動する。
  # すばらしい事だろう!だが残念な事に、この機能は生成したリストの内容を
  # Makefile 中に直接ばらまいてしまう。
  # 私は自分の Makefile をきれいに片付けておきたい。
  # ここで紹介する perl スクリプトは、Makefile 中から依存関係を取り出し、
  # .dependというファイルに移してくれる。
  # あとは上でやったようにそれをincludeすればよい。
  #
  # 付記:'depend' ターゲットは GCC が使えることを期待する。
  # 読者は同じことを他のコンパイラでもできるが、ACE のメイクファイルと
  # ユーティリティは GCC と一緒に動作することを仮定している。
Depend : depend
  perl ../fix.Makefile

.depend : #
  touch .depend


HTML : #
  [ -f hdr ] || $(MAKE) UNSHAR
  perl ../combine *.pre ; chmod +r *.html

SHAR : #
  [ ! -f combine.shar ] || exit 1
  shar -T hdr bodies *.pre > combine.shar && $(RM) hdr bodies *.pre *.pst

UNSHAR : #
  sh combine.shar

CLEAN : realclean
  $(RM) hdr bodies *.pre *.pst .depend

#----------------------------------------------------------------------------
#  Dependencies
#----------------------------------------------------------------------------

  # この下には何も書いてはいけない。
  # depend ターゲットと fix.Makefile によって
  # それらの内容が消されてしまうからだ。

  # これは fix.Makefile スクリプトによって挿入された。
include .depend


[インデックスへ] [次へ進む]