0

Ubuntu で g++ を C++ ライブラリと共に使用しており、そのヘッダー ファイルはすべて従来の .h ではなく .H で終わります。

インクルードディレクトリを変更したくありません...それ以外の場合は、ヘッダーの .h バージョンへのシンボリックリンクを作成するだけです。

プログラムで header.h または header.H を記述できるように、.H ファイルと .h ファイルが同じであることを g++ に自動的に認識させる簡単な方法があるかどうか疑問に思っています。g++ の man ページを調べましたが、このような機能がサポートされているかどうかを判断するのはかなり困難です。

4

5 に答える 5

7

.H は、C++ ヘッダー ファイルを C ヘッダー ファイル (.hpp または .hxx とも) と区別して命名する 1 つの方法です。これは、大文字と小文字を区別する OS でのみ機能します。

ファイルに .H がある場合は、#include <file.H>

于 2009-06-04T15:55:37.603 に答える
3

問題はファイルシステムに起因します。ファイルシステムでは大文字と小文字が区別されるため、header.h と header.H の違いが見られます。これは g++ の問題ではありません。大文字と小文字を区別しないファイルシステム/OS で実行すると、win32 システムで g++ を実行する場合のように、この問題は発生しません。

于 2009-06-04T15:52:31.443 に答える
2

gcc で大文字と小文字を区別しないようにする簡単な方法は思いつかないので、歯を食いしばって別の解決策を使用する必要があるかもしれません。

#include "foo.H"

...またはいくつかのシンボリック リンクを作成します。

# create .h links to all .H files below the current dir
for basename in `find . -name *.H | sed 's/\(.*\)\..*/\1/'`; do
  ln -s $basename.H $basename.h
done

参考までに、gcc メーリング リストに case-insensitivity を要求する最近のスレッドがあります。応答は主に効率に関するものです。コンパイラに「foo.h」のすべてのバージョン (たとえば、「FOO.H」、「Foo.H」、「foo.H」) を探すように要求すると、より頻繁にディスクにアクセスしています。さらに長いビルド時間を必要とするのは誰ですか? :)

于 2009-06-04T20:09:42.400 に答える
2

これは Linux ファイル システムの実装の詳細だと思います。Windows では .h ファイルと .H ファイルは事実上同じですが、Linux では、traditional.h と traditional.H を同じディレクトリに置くことができます。

私の理解が正しければ、ヘッダーを含むファイルで大文字の H を指定するだけで済みます。

于 2009-06-04T15:52:26.637 に答える
2

ヘッダー ファイルの名前を変更したり、ソースに .H ファイルを #include したりしたくない場合は、対応する .H ファイルを #include するだけの .h ファイルのセットを作成できます。

于 2009-06-04T15:58:21.910 に答える