本章では、Sun WorkShop Visual のメークファイル生成機能について説明します。Sun WorkShop Visual は、単純メークファイルあるいはテンプレート付きメークファイルの 2 種類を作成することができます。単純メークファイルは局所的な .xd ファイルに対する構築規則だけを含んでいるため、単一のファイル構成のアプリケーションにのみ役立ちます。テンプレート付きメークファイルを更新して、以前の作業を書き換えることなくファイルを追加することができるため、多くの生成ファイルとは異なり、編集および再生成によって以前の作業内容が失われることはありません。
本章では、デザインに対してコードを生成するときに使用できるメークファイルオプションについて説明します。また、簡単な学習例を使用して、テンプレート付きメークファイルを作成し、アプリケーションに第 2 のデザインファイルが追加された場合にメークファイルを更新するための指示について、段階を追って説明していきます。この学習例によって、Sun WorkShop Visual のメークファイル生成機能について十分理解することができます。
「メークファイル」テキストボックスの横の 「オプション」 ボタンを押すと、図 19-1 に示すようなダイアログが表示されます。
このダイアログには、「新規メークファイル」、「メークファイル・テンプレート」、「デバッグ」という 3 つのトグルとスクロールリストがあります。「デバッグ」 をオンにするとコンパイラに送られるフラグリストに -g フラグが追加されて、デバッグ用のアプリケーションのバージョンを構築することができます。
「新規メークファイル」 と 「メークファイル・テンプレート」 は、ユーザーが生成することのできる 2 種類のメークファイル (単純なメークファイルとテンプレート付きメークファイル) と関連しています。どちらのメークファイルが生成されるかは、このダイアログのどのトグルがオンになっているかによって異なります。2 つのトグルは相互関連して動作します。トグルの設定方法には次の 4 通りがあります。
1. 「新規メークファイル」 トグルをオンにして、「メークファイル・テンプレート」 トグルをオフにする
単純メークファイルが生成されます。メークファイルが構築するアプリケーションに他のデザインファイルを追加しない場合は、このオプションを使用します。
テンプレート付きメークファイルが生成されます。たとえば、次回からの生成でファイルを更新するためのテンプレートとなる構造化コメント付きのメークファイルなどが生成されます。メークファイルが構築するアプリケーションに他のデザインファイルを追加する場合は、このオプションを使用します。
「メークファイル・オプション」 ダイアログのスクロールリストを使用して、特定のプラットフォーム用のメークファイルを生成できます。プラットフォームによっては複数のオプションを使用することができるため、さまざまな環境に適用できます。たとえば、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 回ごとに指定のプラットフォームに異なるターゲットを指定するには、「マルチターゲット」メークファイルが最も便利です。
第 1 段階では、デザインを作成し、デザインに対する C コードを生成して初期メークファイルを作成します。ここでは、Sun WorkShop Visual の一般的な使用方法についての知識があることを前提に説明を進めます。
1. 新しいディレクトリ myapp を作成します。このディレクトリを現作業ディレクトリとして Sun WorkShop Visual を起動します。
2. 図 19-2 に示すウィジェット階層を構築します。
メークファイルを作成する前に、それに含めるコードファイルを生成する必要があります。コードファイルを生成すると、デザインファイルでそのコードファイルの名前が設定されます。この作業が行われるまでは、メークファイル生成機能はファイルの名前を識別することができません。したがって、ファイルをメークファイルに追加することもできません。
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 に示すように、「新規メークファイル」および「メークファイル・テンプレート」の両方のトグルをオンにします。
ダイアログの右側のスクロールリストについては、「メークファイルの種類のリスト」 で説明しています。
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
初期メークファイルを生成した場合には、その後の作業を反映させるためにメークファイルを更新することができます。 メークファイルの更新は、以下の手順に従って行います。
まず、別のファイルにポップアップダイアログを構築し、そのためのコードを生成してから、メークファイルを更新して新しいモジュールを反映させます。
1. ファイルメニューから「新規」を選択し、新しいデザインを開始します。
2. 図 19-4 に示すような階層を構築します。
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 に示すように「メークファイル・オプション」ダイアログで「新規メークファイル」トグルをオフにし、「メークファイル・テンプレート」トグルはオンのままにします。
生成されたメークファイルは、新しいモジュールで更新されます。
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 個のスタブを記入し、アプリケーションを構築します。
生成されたインクルードのリストの最後尾に、次の行を追加します。
#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 );
}
cancel_error コールバックに機能性を与えます。この関数は、ユーザーが「取消し」ボタンを押した場合にエラーダイアログを消去します。
void
Widget w, XtPointer client_data, XtPointer{
...
XtUnmanageChild ( error_box );
}
4. ファイル myapp.xd を Sun WorkShop Visual で開きます。
5. ファイル myapp.res に X リソースを生成します。
setenv XENVIRONMENT myapp.res
XENVIRONMENT=myapp.res; export XENVIRONMENT
メークファイルは、情報を失うことなく編集および再生成できます。一般的な変更を行うには、ファイルの先頭にあるメークファイルオプションを編集します。たとえば、コンパイラに ../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
テンプレートインスタンスは、編集しないことをお勧めします。編集しても次回のメークファイル生成時に、行なった編集が失われる場合があります。構築コマンドを変更するには、テンプレートインスタンスを編集する代わりに、対応するテンプレート行を編集します。テンプレート行を編集した後は、メークファイルにすでに存在するテンプレート行のインスタンスを削除します。インスタンスは、テンプレート行の直後にあります。
オリジナルのテンプレートは、以下のリソースによって示されるファイルにより指定されます。
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 は、新しいメークファイルの生成時にのみテンプレートリソースを参照します。既存のメークファイルにおけるテンプレートを変更するには、前節で説明したように手作業でファイルを編集するか、ファイルを削除してテンプレートを作成し直します。
$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
サン・マイクロシステムズ株式会社 Copyright information. All rights reserved. |