0


0

#includeファイルをインラインで展開でき、ディレクティブを展開できませんか?

アプリケーションの展開を簡素化しようとしています。 エンドユーザーのマシンで最終アプリケーションをビルドするには、いくつかの* C *ファイルをコンパイルする必要があります。 これは、数十個のヘッダーファイルをアプリケーションとともに出荷する必要があることを意味します。 インクルードファイルの内容を事前にインクルードできるようにしたいのですが、インクルードがインライン化された後にディレクティブ( `#if`など)を制御できるようにする必要もあります。 残りの前処理を行わずに、ヘッダーのみを含めることができるcppオプションが見つかりません。 私の選択肢は何ですか?

例:

File1.h

void dummy_func()
{return;}

File2.h

#if INCLUDE_FILE1
    #include "file1.h"
#endif

最後に、次のようなファイルが必要です。

#if INCLUDE_FILE1
void dummy_func()
{return;}
#endif

3 Answer


0


どの#ifセクションをコンパイルするかを制御するために#ifdefを使用するのはどうですか?


0


_ エンドユーザーのマシンで最終アプリケーションを構築するには、いくつかのCファイルをコンパイルする必要があります。 これは、数十個のヘッダーファイルをアプリケーションとともに出荷する必要があることを意味します。 _

だから何? すべてのファイル(ヘッダーを含む)をtarballに入れて、健全なビルドシステム(_do_に少なくともMakefileがありますよね?)がある場合、多くのファイルがあることの問題は何ですか?


0


二重インクルードガードのため、#includesをインライン化するツールは巨大なファイルを引き起こす可能性があり、多くのヘッダーが完全に一致しない#ifndefs内にあります。 極端な場合、インクルードが再帰的である場合は、無限サイズの出力ファイルが発生することさえあります(通常、ダブルインクルードガードのため問題ありません)。

このコードが正常にコンパイルされることを確認しました。

main.cpp:

#include "a.h"
int main() { return 0; }

a.h:

#ifndef A_H_INCLUDED
#define A_H_INCLUDED

#include "b.h"

#endif

b.h:

#ifndef B_H_INCLUDED
#define B_H_INCLUDED

#include "a.h"

#endif

ifdefsに手を加えず、解析しないようにしたいので、 `#includes`をインライン化するツールは無限の出力を引き起こします。