6.7.7 在同一目录中使用模板生成多个程序
如果要通过指定 -instances=extern 生成多个程序或库,建议在不同的目录中生成这些程序或库。如果要在同一目录中生成多个程序,那么您需要清除不同生成程序之间的系统信息库。这样可以避免出现任何不可预料的错误。有关更多信息,请参见7.4.4 共享模板系统信息库。
考虑以下示例的 make 文件 a.cc、b.cc、x.h 和 x.cc。请注意,仅当指定了 -in tances=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
|