0

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

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

誰かがこの問題の良い解決策を見つけましたか?

4

1 に答える 1

1

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

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

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

バージョン 6.0では、IBM は -qtempincではなく-qtemplateregistry 設定を使用することをお勧めします。次に、ヘッダー ファイルにテンプレート定義を含める典型的なテンプレート セットアップを使用できます。これは、依存関係ファインダーに表示されるか、ヘッダー ファイルから #include する別のファイルにそれらを配置することもできます。依存関係ファインダーを使用して見つかりました。

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

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

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

于 2008-10-06T17:42:12.753 に答える