Oracle® Solaris Studio 12.4:C++ 用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

6.7.7 在同一目录中使用模板生成多个程序

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

考虑以下包含 makefile a.ccb.ccx.hx.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,请在两个生成之间添加 make clean。以下命令会引起错误:

example% make a
example% make b

以下命令不会产生任何错误:

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