2016-09-28 70 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

頭文件包含一個編譯時活動不運行時間。因此,如果對同一

使用條件的#ifdefs

#define SERVER_IN_LIST 

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

如何在Jam文件中指定這個if else? – Rajs123

0

在C和C++是始於#pre-processor指令任何線路不能使用。預處理器是一個文本解析器,它在編譯之前解析源代碼文件。它理解特定指令,如#include,#define#ifdef,但它將普通C++代碼視爲文本。由於這個原因,你不能使用普通的C++代碼來改變預處理器指令的解釋。

讓我們來看一個例子:

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

以上是錯誤的,因爲if語句及其括號是C++代碼,以便將預處理器被忽略的一部分。預處理器將直接前進並解釋#include指令,這將導致x4.h的內容被粘貼到文件中的該位置。

寫這個的正確方法是使用條件預處理器指令,如#if#ifdef。例如...

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

請注意,此代碼中的縮進是可選的。

有關預處理器指令的更多信息可以參考here