-instances=extern を指定して複数のプログラムまたはライブラリを構築する場合は、それらを別のディレクトリに構築します。同一ディレクトリ内に構築する場合は、構築ごとにリポジトリを消去します。これにより、予期しないエラーが回避されます。詳細は、テンプレートリポジトリの共有を参照してください。
メイクファイル 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 の両方を構築する場合は、それらの 2 つの構築の間に make clean コマンドを追加します。次のコマンドでは、エラーが発生します。
example% make a example% make b
次のコマンドでは、エラーは発生しません。
example% make a example% make clean example% make b