1

多くの共通コードを共有するプロジェクトがいくつかありますが、プロジェクトによっては、共通コードの特定の部分を含める必要がない場合があります。

これを含む project_names.hh という別のファイルを作成しようとしました:

// list of project names
#define FIRSTPROJECT 0
#define SECONDPROJECT 1

// PROJECT_NAME must be set to one of the above names in the project's main.cc file
#define PROJECT_NAME

次に、プロジェクトのメイン ファイルの 1 つで、次のようにします。

#define PROJECT_NAME FIRSTPROJECT

問題は、別のファイルに project_names.hh を含めても、このステートメントをコンパイルできないように見えることです。

#if PROJECT_NAME == FIRSTPROJECT

次のエラーが表示されます。

エラー: 演算子 '==' に左オペランドがありません

誰かがこれを行う良い方法を持っていますか?

ありがとう!

マロン

4

5 に答える 5

2

これPROJECT_NAMEは、行で空の文字列になるように定義したためです

#define PROJECT_NAME

あなたはそれをに変更したい

#define PROJECT_NAME FIRSTPROJECT

これは、そのプロジェクトのすべてのファイルが #include するヘッダー ファイルにある必要があります。

または、を取り除き、#define PROJECT_NAME代わり
-DPROJECT_NAME=FIRSTPROJECTにそのプロジェクト内のすべてのファイルに対してコンパイラ コマンド ラインで使用することもできます。同じファイルが複数のプロジェクトで使用されている場合は、さまざまなオプションで複数回コンパイルし、出力をさまざまな場所に配置する必要があることに注意してください...

于 2012-09-06T22:40:28.240 に答える
1

私があなたの状況にあった場合、PROJECT_NAME をこれらの値のいずれかに設定する代わりに、単に FIRSTPROJECT または SECONDPROJECT のいずれかを定義します。#ifdef次に、その値が設定されているかどうかを確認するために使用します。

于 2012-09-06T22:39:50.993 に答える
1

ではなく#define PROJECT_NAME FIRSTPROJECT

使用#define FIRSTPROJECT

次に、その存在を確認します#ifdef FIRSTPROJECT

于 2012-09-06T22:40:15.587 に答える
0

これは、PROJECT_NAMEが設定されていないことが原因である可能性があります。どのファイルがコンパイルされているかを確認し、そこに#defineが設定されているかどうかを確認する必要があります。

構築プロセス全体のコンパイラオプションとしてdefineを設定すると役立つ場合があります。私が知っているほとんどのコンパイラ(gcc、MSVC、clang、xlC)の場合、コンパイラオプションは次のようになります。

-DPROJECT_NAME=FIRSTPROJECT

于 2012-09-06T22:45:40.587 に答える
0

を実行しているファイルに project_names.hh を含める必要があります#if PROJECT_NAME == FIRSTPROJECT。そもそも、プリプロセッサがステートメント設定を読み込んで実行していない可能性がありますPROJCET_NAME

于 2012-09-06T22:43:33.680 に答える