2016-09-28 7 views
0

私は、特定のライブラリをいくつかのサーバに含める必要があるC++コードを持っています。私はbjamを使用してコードをビルドします。オプションでC++にヘッダファイルをインクルード

コード例:

if server in server_list: 
    include <header-file.h> 
    int function(); 
else: 
    int function(); 

とbjamを使用してビルド中:

if server in server_list: 
    -llibrary 
else: 
    ... 
+2

は '#define'を使用します。 –

+0

特定のサーバーで実行している場合にのみ定義するにはどうすればよいですか? – Rajs123

+0

@ Rajs123異なるライブラリが必要な別のサーバーで実行している場合は、別の実行可能ファイルをビルドするか、必要に応じてロードするDLLを使用する必要があります。 (私はあなたがPythonの 'import'に似た何かを期待しているのではないかと思っています)C++はそのようには機能しません) – molbdnilo

答えて

1

ヘッダファイルのインクルードはコンパイル時の活動は、時間を実行していません。同じ

使用するための条件は、CおよびCでは

#define SERVER_IN_LIST 

#ifdef SERVER_IN_LIST 
    #include<...> 
#endif 
+0

そしてJamファイルでこれを指定する方法は? – Rajs123

0

++ #pre-processorディレクティブあるで始まる行を#ifdefsのであれば、あなたは使用することはできません。プリプロセッサは、コンパイルする前にソースコードファイルを解析するテキストパーサーです。 #include,#define#ifdefなどの特定の指令を理解していますが、通常のC++コードをそのままテキストとして扱います。このため、通常のC++コードを使用してプリプロセッサ指令の解釈を変更することはできません。

は例を見てみましょう:if文と、その中括弧は、C++コードの一部であるので、事前にプロセッサによって無視されますので、

if (x == 4){ 
    #include "x4.h" 
} 

以上が間違っています。プリプロセッサは直進して#include指示文を解釈し、x4.hの内容をファイルのその位置に貼り付けます。

これを書き込む正しい方法は、#ifまたは#ifdefなどの条件付きプリプロセッサディレクティブを使用することです。たとえば...

#ifdef INCLUDE_X4 
# include "x4.h" 
#endif 

このコードのインデントはオプションです。

プリプロセッサディレクティブの詳細については、hereを参照してください。

関連する問題