2016-09-28 10 views
0

일부 서버에서는 특정 라이브러리를 포함해야하고 다른 서버에서는 포함하지 않아야하는 C++ 코드가 있습니다. bjam을 사용하여 코드를 빌드합니다.헤더 파일을 C++에 선택적으로 포함하십시오.

코드 예제 :

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

은'# define'을 사용합니다. –

+0

특정 서버에서 실행될 때만 어떻게 정의합니까? – Rajs123

+0

@ Rajs123 다른 라이브러리가 필요한 다른 서버에서 실행중인 경우 다른 실행 파일을 빌드하거나 필요에 따라로드하는 DLL을 사용해야합니다. (나는 당신이 파이썬에서'import'와 비슷한 것을 기대하고 있다고 생각합니다 .C++은 그런 식으로 작동하지 않습니다.) – molbdnilo

답변

1

헤더 파일 포함이 시간을 실행하지 컴파일 시간 활동 : bjam을 사용

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

그리고 빌드시

. 같은

사용 온도는 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 (x == 4){ 
    #include "x4.h" 
} 

다음은 if 문 및 중괄호는 C++ 때문에 사전 프로세서에 의해 무시됩니다 코드의 일부이기 때문에 잘못을. 전 처리기는 곧바로 진행하여 #include 지시어를 해석하면 x4.h의 내용이 파일의 해당 위치에 붙여 넣어집니다.

이 방법을 쓰는 올바른 방법은 #if 또는 #ifdef과 같은 조건부 전 처리기 지시문을 사용하는 것입니다. 예를 들어 ...

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

이 코드의 들여 쓰기는 선택 사항입니다.

사전 처리기 지시문에 대한 자세한 내용은 here을 참조하십시오.