6.7.7 テンプレートを使用して複数のプログラムを同一ディレクトリに構築する
-instances=extern を指定して複数のプログラムまたはライブラリを構築する場合は、それらを別のディレクトリに構築することを推奨します。同一ディレクトリ内に構築する場合は、構築ごとにリポジトリを消去する必要があります。これにより、予期しないエラーが回避されます。詳細は、「7.4.4 テンプレートリポジトリの共有」を参照してください。
次のような各ファイルが存在する、次の例を考慮してください。make ファイル、 a.cc、b.cc、x.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();
} | 
a と b の両方を構築する場合は、それらの構築の間に make clean を実行します。次のコマンドでは、エラーが発生します。
| 
 example% make a
example% make b | 
次のコマンドでは、エラーは発生しません。
| 
 example% make a
example% make clean
example% make b |