前へ 次へ 目次 文書セット ホーム


第 19 章

 

メークファイル生成


はじめに

本章では、Sun WorkShop Visual のメークファイル生成機能について説明します。Sun WorkShop Visual は、単純メークファイルあるいはテンプレート付きメークファイルの 2 種類を作成することができます。単純メークファイルは局所的な .xd ファイルに対する構築規則だけを含んでいるため、単一のファイル構成のアプリケーションにのみ役立ちます。テンプレート付きメークファイルを更新して、以前の作業を書き換えることなくファイルを追加することができるため、多くの生成ファイルとは異なり、編集および再生成によって以前の作業内容が失われることはありません。

本章では、デザインに対してコードを生成するときに使用できるメークファイルオプションについて説明します。また、簡単な学習例を使用して、テンプレート付きメークファイルを作成し、アプリケーションに第 2 のデザインファイルが追加された場合にメークファイルを更新するための指示について、段階を追って説明していきます。この学習例によって、Sun WorkShop Visual のメークファイル生成機能について十分理解することができます。

メークファイル生成オプション

「メークファイル」テキストボックスの横の 「オプション」 ボタンを押すと、図 19-1 に示すようなダイアログが表示されます。

 

    図 19-1 「メークファイル・オプション」 ダイアログ

このダイアログには、「新規メークファイル」、「メークファイル・テンプレート」、「デバッグ」という 3 つのトグルとスクロールリストがあります。「デバッグ」 をオンにするとコンパイラに送られるフラグリストに -g フラグが追加されて、デバッグ用のアプリケーションのバージョンを構築することができます。

「新規メークファイル」トグルと「メークファイル・テンプレート」トグル

「新規メークファイル」 と 「メークファイル・テンプレート」 は、ユーザーが生成することのできる 2 種類のメークファイル (単純なメークファイルとテンプレート付きメークファイル) と関連しています。どちらのメークファイルが生成されるかは、このダイアログのどのトグルがオンになっているかによって異なります。2 つのトグルは相互関連して動作します。トグルの設定方法には次の 4 通りがあります。

    1. 「新規メークファイル」 トグルをオンにして、「メークファイル・テンプレート」 トグルをオフにする

    単純メークファイルが生成されます。メークファイルが構築するアプリケーションに他のデザインファイルを追加しない場合は、このオプションを使用します。

    2. 両方のトグルをオンにする

    テンプレート付きメークファイルが生成されます。たとえば、次回からの生成でファイルを更新するためのテンプレートとなる構造化コメント付きのメークファイルなどが生成されます。メークファイルが構築するアプリケーションに他のデザインファイルを追加する場合は、このオプションを使用します。

    3. 「新規メークファイル」 トグルをオフにして、「メークファイル・テンプレート」 トグルをオンにする

      2 で生成されたメークファイルに現在のデザインコードファイルが追加されます。

    4. 両方のトグルをオフにする

      3 と同じ結果になります。

メークファイルの種類のリスト

「メークファイル・オプション」 ダイアログのスクロールリストを使用して、特定のプラットフォーム用のメークファイルを生成できます。プラットフォームによっては複数のオプションを使用することができるため、さまざまな環境に適用できます。たとえば、Solaris では、アプリケーションを 32 ビットアーキテクチャにも 64 ビットアーキテクチャにもコンパイルできます。プラットフォームのデフォルトは最初から選択されています。アプリケーションを構築するメークファイルを別のプラットフォームに生成する場合や、デフォルト以外のコンパイラを使用する場合は、このデフォルトを変更します。アプリケーションを実行する環境に合わせて任意の数の各種メークファイルを生成できます。

指定のプラットフォームに対して複数のオプションがある場合などは、「マルチターゲット」 メークファイルを生成できます。メークファイル 1 つで、複数の任意のターゲット (使用可能なもののみ) を指定できます。たとえば、「メークファイル・オプション」 ダイアログから次を選択するとします。

Solaris 32/64 Multi-target C/C++ (sparc)

この場合、「メークファイル・オプション」 ダイアログから使用可能な他のすべての Solaris メークファイル (以下参照) と同じことを実行できるメークファイルが生成されます。

Solaris 32bit Ansi C/C++
Solaris 64bit Ansi C/C++ (sparc)
Solaris 32bit Workshop4 Compatible C++

マルチターゲットメークファイルとは、「メークファイル・オプション」 ダイアログのスクロールリスト中で、「Multi-target」 という語を含むメークファイルのことです。使用できるコマンド行オプションについては、メークファイルを調べるとわかります。

アプリケーションのバージョンを 1 つだけ構築する場合は、適切なメークファイルタイプを選択します。アプリケーションを何度も構築する場合で、1 回ごとに指定のプラットフォームに異なるターゲットを指定するには、「マルチターゲット」メークファイルが最も便利です。

メークファイル生成時の諸注意

メークファイルを生成する場合、以下の点に注意してください。

  • テンプレート付きメークファイルを選択する場合は、メインデザイン (通常、アプリケーションシェルを含むデザイン) に対して最初のメークファイル (「新規メークファイル」 と 「メークファイルテンプレート」 の両方のトグルをオンにして生成するメークファイル) を生成します。Sun WorkShop Visual では、アプリケーションの名前として、「新規メークファイル」を生成するデザインの一次ソースファイルの名前を使用します。
  • 「メークファイル・テンプレート」 だけを選択する場合は、生成済みのメークファイルの名前を指定してください。別の名前を指定するとエラーが報告されます。
  • テンプレート付きメークファイルを編集し、変更内容を適用して、そのメークファイルを再生成できます。これは単純メークファイルには適用されません。

初期メークファイルの作成

第 1 段階では、デザインを作成し、デザインに対する C コードを生成して初期メークファイルを作成します。ここでは、Sun WorkShop Visual の一般的な使用方法についての知識があることを前提に説明を進めます。

    1. 新しいディレクトリ myapp を作成します。このディレクトリを現作業ディレクトリとして Sun WorkShop Visual を起動します。

    2. 図 19-2 に示すウィジェット階層を構築します。

    これは、ボタンを含むフォームを持つアプリケーションシェルです。

 

    図 19-2 メインプログラムのウィジェット階層

    3. プッシュボタンに活性化コールバックである button_pressed を指定します。

    メークファイルを作成する前に、それに含めるコードファイルを生成する必要があります。コードファイルを生成すると、デザインファイルでそのコードファイルの名前が設定されます。この作業が行われるまでは、メークファイル生成機能はファイルの名前を識別することができません。したがって、ファイルをメークファイルに追加することもできません。

    4. 「コード生成」ダイアログを表示して、「言語」メニューで「C」が選択されていることを確認します。

    「コード生成」ダイアログには保存ファイル名が表示されます。デザインが保存されていない場合は、untitled と表示されます。

    5. 「コード」テキストボックスに myapp.c と入力して、「生成」トグルをオンにします。

    6. 「メインプログラム」テキストボックスに myapp.c と入力して、「生成」トグルをオンにします。

    「コード」テキストボックスと「メインプログラム」テキストボックスに表示されるファイル名が同一の場合は、コードファイルは main() 手続きとともに生成されます。

    7. 「コードオプション」ダイアログで、「ヘッダーファイルをインクルード」トグルをオンにします。

    8. 「コード生成」ダイアログの「スタブ」テキストボックスに app_stubs.c と入力して、「生成」トグルをオンにします。

    9. 「コードオプション」ダイアログの「リンク」オプションメニューから「生成しない」を選択します。

    これで myapp.c および app_stubs.c のコンパイルとリンクを行うメークファイルを生成できる状態になりました。

    10. 「メークファイル」テキストボックスに Makefile と入力して、「生成」トグルをオンにします。

    11. 図 19-3 に示すように、「新規メークファイル」および「メークファイル・テンプレート」の両方のトグルをオンにします。

    ダイアログの右側のスクロールリストについては、「メークファイルの種類のリスト」 で説明しています。

 

    図 19-3 初期メークファイル生成

    12. 「コード生成」ダイアログの「生成」ボタンを押します。

    生成されたメークファイルには、必要な作成規則や詳細な修正を行うためのテンプレート行が含まれています。テンプレート行以外に、生成されたメークファイルには以下の規則が含まれています。

    XD_C_PROGRAMS=\
    		myapp
    XD_C_PROGRAM_OBJECTS=\
    		myapp.o
    XD_C_PROGRAM_SOURCES=\
    		myapp.c
    XD_C_STUB_OBJECTS=\
    		app_stubs.o
    XD_C_STUB_SOURCES=\
    		app_stubs.c
    myapp: myapp.o $(XD_C_OBJECTS) $(XD_C_STUB_OBJECTS)
    	$(CC) $(CFLAGS) $(CFPPFLAGS) $(LDFLAGS) -o myapp myapp.o
    $(XD_C_OBJECTS) $(XD_C_STUB_OBJECTS) $(MOTIFLIBS) $(LDLIBS)
    myapp.o: myapp.c
    	$(CC) $(CFLAGS) $(CPPFLAGS) -c myapp.c
    app_stubs.o: app_stubs.c
    	$(CC) $(CFLAGS) $(CPPFLAGS) -c app_stubs.c

    13. 現在のデザインを myapp.xd に保存します。

初期メークファイルの更新

初期メークファイルを生成した場合には、その後の作業を反映させるためにメークファイルを更新することができます。 メークファイルの更新は、以下の手順に従って行います。

まず、別のファイルにポップアップダイアログを構築し、そのためのコードを生成してから、メークファイルを更新して新しいモジュールを反映させます。

    1. ファイルメニューから「新規」を選択し、新しいデザインを開始します。

    2. 図 19-4 に示すような階層を構築します。

 

    図 19-4 第 2 のポップアップダイアログ

    3. シェルおよびメッセージボックスにそれぞれ error_shell error_box と名前を付けます。

    4. メッセージボックスに取り消しコールバックである cancel_error を指定します。

    5. 「コード生成」ダイアログを表示して、「言語」メニューに「C」が選択されていることを確認します。

    6. 「外部宣言」テキストボックスに error.h と入力して、「生成」トグルをオンにします。

    7. 「コード」テキストボックスに error.c と入力して、「生成」トグルをオンにします。

    8. 「コードオプション」ダイアログで「ヘッダーファイルをインクルード」トグルをオンにして、「ヘッダーファイルをインクルード」テキストボックスに error.h と入力します。

    9. 「スタブ」テキストボックスに error_stubs.c と入力して、「生成」トグルをオンにします。

    10. 「メインプログラム」の横にある「生成」トグルがオフになっていることを確認してください。

    11. 「コードオプション」ダイアログの「リンク」オプションメニューから「生成しない」を選択します。

    12. 「メークファイル」テキストボックスに Makefile と入力して、「生成」トグルをオンにします。

    13. 図 19-5 に示すように「メークファイル・オプション」ダイアログで「新規メークファイル」トグルをオフにし、「メークファイル・テンプレート」トグルはオンのままにします。

 

    図 19-5 メークファイルの更新

    14. 「コード生成」ダイアログの「生成」ボタンを押します。

    生成されたメークファイルは、新しいモジュールで更新されます。

    XD_C_PROGRAMS=\
    myapp
    XD_C_PROGRAM_OBJECTS=\
    myapp.o
    XD_C_PROGRAM_SOURCES=\
    myapp.c
    XD_C_OBJECTS=\
    error.o
    XD_C_SOURCES=\
    error.c
    XD_C_STUB_OBJECTS=\
    error_stubs.o\
    app_stubs.o
    XD_C_STUB_SOURCES=\
    error_stubs.c\
    app_stubs.c
    myapp: myapp.o $(XD_C_OBJECTS) $(XD_C_STUB_OBJECTS)
    $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o myapp\
    myapp.o $(XD_C_OBJECTS)\
    $(XD_C_STUB_OBJECTS) $(MOTIFLIBS)\
    $(LDLIBS)
    myapp.o: myapp.c
    $(CC) $(CFLAGS) $(CPPFLAGS) -c myapp.c
    error.o: error.c
    $(CC) $(CFLAGS) $(CPPFLAGS) -c error.c
    app_stubs.o: app_stubs.c
    $(CC) $(CFLAGS) $(CPPFLAGS) -c app_stubs.c
    error_stubs.o: error_stubs.c
    $(CC) $(CFLAGS) $(CPPFLAGS) -c error_stubs.c

アプリケーションの構築

Sun WorkShop Visual はこの時点で 2 個のダイアログに対してのそれぞれのコードファイル、2 個のスタブファイル、 1 個のメークファイルを生成しています。最後に 2 個のスタブを記入し、アプリケーションを構築します。

    1. app_stubs.c を編集して、以下に示す変更を行います。

    生成されたインクルードのリストの最後尾に、次の行を追加します。

    #include <error.h>

    button_pressed コールバック・スタブに機能性を与えます。このコールバックは、ボタンが押された場合にエラーダイアログをポップアップするものです。

    void
    button_pressed (Widget w, XtPointer client_data, XtPointer 
    							call_data )
    {
        ...
        if ( error_shell == NULL )
              create_error_shell (XtParent (XtParent (w) ) );
        XtManageChild ( error_box );
    }

    2. error_stubs.c を編集し、次に示す変更を行います。

    cancel_error コールバックに機能性を与えます。この関数は、ユーザーが「取消し」ボタンを押した場合にエラーダイアログを消去します。

    void
    Widget w, XtPointer client_data, XtPointer{
    	...
    	XtUnmanageChild ( error_box );
    }

    3. 現在のデザインを error.xd に保存します。

    4. ファイル myapp.xd を Sun WorkShop Visual で開きます。

    5. ファイル myapp.res に X リソースを生成します。

    6. これらのリソースを呼び出すために、コマンド行に以下の操作を行います。

    7. C シェルを使用している場合は、コマンド行に以下のように入力します。

		setenv XENVIRONMENT myapp.res

    8. Bourne シェル (sh) または Korn シェル (ksh) を使用している場合は、コマンド行に、以下のように入力します。

		XENVIRONMENT=myapp.res; export XENVIRONMENT

    9. $VISUROOT を Sun WorkShop Visual のインストールディレクトリに設定します。

    $VISUROOT は、メークファイルがファイルおよびライブラリを参照する際に、Sun WorkShop Visual のインストールディレクトリへの相対パスとして使用します。

    10. アプリケーションを構築します。コマンド行に以下のように入力します。

    make
    

    11. アプリケーションを実行させるために、以下のように入力します。

    myapp
    

生成されたメークファイルの編集

メークファイルは、情報を失うことなく編集および再生成できます。一般的な変更を行うには、ファイルの先頭にあるメークファイルオプションを編集します。たとえば、コンパイラに ../hdrs ディレクトリ内でヘッダーファイルを検索させる場合には、以下に示す内容をメークファイル内の CFLAGS 行の最後に追加します。

-I../hdrs

CFLAGS に対する変更は、「新規メークファイル」トグルをオフにしてメークファイルを再生成する場合には保持されます。変更は、新しいメークファイルを生成する場合にのみ失われます。

テンプレート行の編集

生成されたメークファイルの大部分は、テンプレート行で構成されています。テンプレート行は、メークファイルへの情報の生成を制御するコメントです。テンプレート行には、 # Sun WorkShop Visual : という接頭辞が付きます。たとえば、以下のテンプレート行は、C ソースファイル ( XDG_C_SOURCE ) から C オブジェクトファイルを作成するメークファイル行の生成方法を Sun WorkShop Visual に伝えます。

#Sun WorkShop Visual:XDG_C_OBJECT: XDG_C_SOURCE
#Sun WorkShop Visual:    $(CC) $(CFLAGS) $(CPPFLAGS) -c XDG_C_SOURCE

メークファイルを更新して、アプリケーションにファイルを追加するごとに、Sun WorkShop Visual は各関連テンプレートに対してのテンプレートインスタンスを生成します。これらのインスタンスは、アプリケーションに対しての実際の構築コマンドを含んでいます。テンプレートインスタンスの開始および終了部分には、「 DO NOT EDIT 」コメントで印が付けられます。以下は前述のテンプレートの典型的なインスタンスの例です。

#DO NOT EDIT >>>
error.o: error.c
	    $(CC) $(CFLAGS) $(CPPFLAGS) -c error.c
#<<< DO NOT EDIT

テンプレートインスタンスは、編集しないことをお勧めします。編集しても次回のメークファイル生成時に、行なった編集が失われる場合があります。構築コマンドを変更するには、テンプレートインスタンスを編集する代わりに、対応するテンプレート行を編集します。テンプレート行を編集した後は、メークファイルにすでに存在するテンプレート行のインスタンスを削除します。インスタンスは、テンプレート行の直後にあります。

デバッグするために、すべての C ファイルを構築する例を示します。

    1. テンプレート行を編集します。

    #Sun WorkShop Visual: $(CC) $(CFLAGS) $(CPPFLAGS) -c XDG_C_SOURCE

    を、次のように変更します。

    #Sun WorkShop Visual: $(CC) $(CFLAGS) $(CPPFLAGS) -g -c XDG_C_SOURCE

    2. テンプレート行の次に続くインスタンスを削除します。

    3. 「新規メークファイル」トグルをオフにして、アプリケーション内の各デザインに対しメークファイルを再生成します。

この手順により、修正されたテンプレートを使用して新しいインスタンスが生成されます。

テンプレート構成

オリジナルのテンプレートは、以下のリソースによって示されるファイルにより指定されます。

visu.motifMakeTemplateFile: $VISUROOT/make_templates/motif
visu.mmfcMakeTemplateFile: $VISUROOT/make_templates/mfc

2 個のリソースが存在するため、異なるテンプレートをカスタマイズして、適切なクラスライブラリを選択することができます。リソースの値には、 /bin/sh によって拡張される環境変数を持たせることができます。

Sun WorkShop Visual が、指定されているファイルを見つけることができない場合には、 makefileTemplate というアプリケーションリソースを使用して、Sun WorkShop Visual リソースファイルに指定されているテンプレートにフォールバックします。すべての新しいメークファイルに大域的に適用されるテンプレートを変更するには、リソースファイルを編集します。詳細は、第 25 章「構成」を参照してください。

Sun WorkShop Visual は、新しいメークファイルの生成時にのみテンプレートリソースを参照します。既存のメークファイルにおけるテンプレートを変更するには、前節で説明したように手作業でファイルを編集するか、ファイルを削除してテンプレートを作成し直します。

依存情報

Sun WorkShop Visual は、メークファイルに依存情報を生成しません。デフォルトテンプレートには、depend (依存) 対象が含まれています。これは以下のコマンドを使用して呼び出すことができます。

make depend

この操作は、既存のメークファイルを走査して標準依存リストを追加する makedepend ユーティリティを呼び出します。詳細は、 makedepend のマニュアルページを参照してください。

自身のメークファイルの使用

$VISUROOT/make_template ディレクトリには、メークファイルを生成するために使用するテンプレートがあります。このテンプレートには、サポートされている各システム構成で必要なインクルードディレクトリとライブラリが含まれます。「メークファイル・オプション」 ダイアログから選択した構成によって、テンプレート内で使用する 「ブロック」 が決まります。システムには、常に、デフォルト構成が設定されているので、必ずしもこのダイアログから選択を行う必要はありません。詳細は、「メークファイルの種類のリスト」を参照してください。一般的に使用する 「ブロック」 を以下に示します。

##: system So##: system Solaris 32bit Ansi C/C++
##: default cpp
#UILFLAGS=-I${MOTIFHOME}/include/uil
#MRMLIBS=-L${MOTIF_LIB_DIR} -lMrm
#CPPFLAGS=-Ddrem=remainder -DS_SUNOS5
#MOTIFHOME=/usr/dt
#MOTIFINCLUDES=-I${MOTIFHOME}/include
#MOTIF_LIB_DIR=${MOTIFHOME}/lib${SYSDIR} -R${MOTIFHOME}/lib${SYSDIR}
#XINCLUDES=${MOTIFINCLUDES} -I/usr/openwin/include -I/usr/openwin/include/X11
#X11_LIB_DIR=/usr/openwin/lib${SYSDIR} -R/usr/openwin/lib${SYSDIR}
#XSYSLIBS=-L${X11_LIB_DIR} -lXt -lX11 -lXext -lnsl -lsocket -lgen
#MOTIFLIB=-L${MOTIF_LIB_DIR} -lXm
#CC=cc
#CCC=CC
#ABI2CFLAGS=
#ABI2CCFLAGS=-compat=5
#ABI2LDFLAGS=
#ABI2ABIDIR=/ansi32
#ABI2SYSDIR=
#ABICFLAGS=${ABI2CFLAGS}
#ABICCFLAGS=${ABI2CCFLAGS}
#ABILDFLAGS=${ABI2LDFLAGS}
#SYSDIR=
#ABIDIR=/ansi32
##: end
 

XINCLUDES および XLIBS は、それぞれインクルードするディレクトリとライブラリのパスを示す拡張子です。


前へ 次へ 目次 文書セット ホーム

サン・マイクロシステムズ株式会社
Copyright information. All rights reserved.