2016-11-02 1 views
1

外部に設けられたC++コードベースをコンパイルしようとすると、私は混乱を招く問題が発生しました:C++はコンパイル時にグローバルヘッダをサポートしますか?

ヘッダファイルのいくつかは、てMyLibraryは、単に不足している、とコンパイルを妨げている明白な依存関係です#include <MyLibrary.h>を、欠けています。

質問: C++コードをコンパイルするときに、依存関係のヘッダーファイルを#includeする必要なく、自動的にインクルードする方法がありますか?つまり、すべてのソースコードをコンパイルするときに自動的にインクルードするヘッダファイルのリストをC++プリプロセッサに提供する方法ですか?

これはおそらく非常に悪い考えですが、私が提供したコードが単純に壊れているのか、それとも何らかの方法で各ファイルを手動で修正することなくコンパイルできるかどうかを判断しようとしています依存関係。

+0

私が知っているわけではありません。提案:あなたは適切な標準でコンパイルしていることを確かめていますか、それらのライブラリをインストールしていますか? – Asu

+1

1)CはC++ではありません。Cではありません。2)あなたの質問は明確ではありません。ヘッダーは** source **コードです。実行時には決して使用されません。そして、 '#include 'は外部定義を使う標準的な方法です。あなたは他にどのようなことを考えていますか? – Olaf

+1

Visual Studioではこれを行う方法は間違いありません。プロジェクト内のすべての.cppファイルにファイルが含まれています。これはプリプロセッサオプションの1つです。 –

答えて

3

C++言語標準では「グローバルヘッダー」はサポートされていませんが、個々のコンパイラはサポートしています。

と呼ばれ、強制的に含まれますです。

Visual C++の場合は、/FIのオプション、g ++の場合は-includeのオプションです。 Visual Cで


は++、しかし、共通のヘッダをインクルードする通常の方法は、まず、それらがstdafx.hというファイルに含まれて置き、すべての翻訳単位でそのファイルを含めることです。これは、Visual C++のプリコンパイル済みヘッダーサポートの一部です。これはオンになっている(そしてVisual Studioプロジェクトではデフォルトでオンになっている)ので、いくつかの標準コードがコンパイルされないように前処理ルールを変更するため、大きなビルドを大幅に高速化できるため問題です。

+2

匿名downvoter:あなたのdownvoteを説明してください、読者が将来あなたのコメントと投票をより簡単に無視するかもしれないように。ありがとうございました。 –

2

はい、少なくともgccと互換性があります:-includeオプションを使用してください。 https://stackoverflow.com/a/3387518/3150802を参照してください。

+0

これは本当に悪い考えであり、ビルドツールを無視しています。 – Olaf

+0

@Olaf私はそれを一度も使ったことはありませんが、どちらの主張の正当性もすぐにわかりません。あなたは精緻化できますか? –

+0

Sconsは追加の依存関係を検出しますか?依存関係を変更した場合は、実際に影響を受けるファイル(ソースコード)ではなく、予期しないファイル(ビルドファイル)を編集する必要があります。重要な「最も驚きの」デザイン原則とはかなり反対です。 – Olaf

関連する問題