Oracle® Solaris Studio 12.4: C++ ユーザーズガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

6.7.7 テンプレートを使用して複数のプログラムを同一ディレクトリに構築する

-instances=extern を指定して複数のプログラムまたはライブラリを構築する場合は、それらを別のディレクトリに構築します。同一ディレクトリ内に構築する場合は、構築ごとにリポジトリを消去します。これにより、予期しないエラーが回避されます。詳細は、テンプレートリポジトリの共有を参照してください。

メイクファイル a.ccb.ccx.h、および x.cc. による次の例を考えてみましょう。この例は、-instances=extern を指定する場合のみ有効です。

........
Makefile
........
CCC = CC

all: a b

a:
    $(CCC) -I. -instances=extern -c a.cc
    $(CCC) -instances=extern -o a a.o

b:
    $(CCC) -I. -instances=extern -c b.cc
    $(CCC) -instances=extern -o b b.o

clean:
    /bin/rm -rf SunWS_cache *.o a b
...
x.h
...
template <class T> class X {
public:
  int open();
  int create();
  static int variable;
};
...
x.cc
...
template <class T> int X<T>::create() {
  return variable;
}

template <class T> int X<T>::open() {
  return variable;
}

template <class T> int X<T>::variable = 1;
...
a.cc
...
#include "x.h"

int main()
{
  X<int> temp1;

  temp1.open();
  temp1.create();
}
...
b.cc
...
#include "x.h"

int main()
{
  X<int> temp1;

  temp1.create();
}

ab の両方を構築する場合は、それらの 2 つの構築の間に make clean コマンドを追加します。次のコマンドでは、エラーが発生します。

example% make a
example% make b

次のコマンドでは、エラーは発生しません。

example% make a
example% make clean
example% make b