メイク依存ファイルにIBM XLCテンプレート* .cファイルを含めるにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/168938

  •  05-07-2019
  •  | 
  •  

質問

XLCコンパイラの場合、テンプレートコードは* .cファイルに格納されます。次に、テンプレート関数を使用するプログラムがコンパイルされると、コンパイラは.cファイルでテンプレート定義を見つけてインスタンス化します。

問題は、xlC -qmakedependを実行してビルドの依存関係を生成するときに、これらの.cファイルがデフォルトで含まれていないことです。したがって、これらの.cファイルの1つを変更しても、それに依存するすべてが自動的にビルドされることはありません。

この問題の良い解決策を見つけた人はいますか?

役に立ちましたか?

解決

要するに、答えはXLCのtempincユーティリティを使用して移行することです。

tempincユーティリティでは、ヘッダー(.hまたは.hpp)ファイルのテンプレート宣言と.cファイルの実装を使用してファイルを設定する必要があります(この拡張子は必須です)。コンパイラはテンプレートのインスタンス化を見つけると、tempincディレクトリ内の別のソースファイルに明示的なインスタンス化を配置し、それらのコードを強制的に生成します。コンパイラーは、foo.c内のfoo.hで宣言されているテンプレート定義を見つけることを知っています。

指定した問題は、依存関係ビルダーがこれについて知らないため、依存関係に.cファイルを含めることができないことです。

バージョン6.0の場合 IBMは、 -qtempincではなく-qtemplateregistry設定。次に、ヘッダーファイルにテンプレート定義を含めるという一般的なテンプレート設定を使用できます。テンプレート定義は依存関係ファインダーに表示されるか、ヘッダーファイルから#includeする別のファイルに配置します。依存関係ファインダーを使用して検出されました。

-qtempincを使用して移行する場合、以下のようなコードを使用して、宣言ファイルからテンプレート実装ファイルを条件付きでインクルードできます。

// end of foo.h
#ifndef __TEMPINC__          
#include "foo.c"       
#endif       

-qtempic設定を使用することに戻った場合、コードがビルドおよびリンクされます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top