如果要通过指定 -instances=extern 生成多个程序或库,请在不同的目录中生成这些程序或库。如果要在同一目录中生成多个程序,则在各次生成之间需要清除系统信息库。该做法可以避免出现任何不可预料的错误。有关更多信息,请参见共享模板系统信息库。
考虑以下包含 makefile 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