2013-05-14 1 views
1

저는 다중 플랫폼 프로젝트를 진행하고 있습니다. 가능한 한 외부 도구없이 OS 고유의 포함을 관리하는 간단하고 빠른 방법이 필요합니다.C++ 플랫폼 관련 내용

나는 당신은 플랫폼 자체에 의해 정의 된 처리기 지시문을 가질 수 있습니다 (I 작동하지 않습니다 잘 알고 있어요)이 같은

#define PLATFORM_A 1 
#define PLATFORM_B 2 

#ifndef TARGET_PLATFORM 
//ERROR 
#endif 

#if TARGET_PLATFORM == PLATFORM_A 
    #define DIR "a" 
#elif TARGET_PLATFORM == PLATFORM_B 
    #define DIR "b" 

#define PLATFORM_INCLUDE(file) \ 
    #include "platforms/" DIR "/" file 
+0

는, 그 상수를 주입한다. 예를 들어, 리눅스를 사용한다면, Makefile은'gcc -DPLATFORM = windows'를 가질 것입니다. 그러나 문제는 무엇을하려는 것입니까? 예를 들어 Win32 API 프로그램은 Qt 프로그램과 동일한 소스 트리에 배포되지 않지만 소켓을 만들려고하면 소스 파일이 #if 조건으로 흩어져있을 수 있습니다. –

답변

3

만 파일 이름을 지정할 수 있습니다 의존 소스 코드와 사용 플랫폼에 파일을 포함 디렉토리를 포함합니다. 이 디렉토리는 환경 변수로 쉽게 구성 될 수 있습니다. 다음과 같이 내가 꽤 자주 볼

+0

그것은 우리의 현재 설정에 대한 완벽한 솔루션이 될 것입니다. 내가 왜 그렇게 생각하지 않았어? : P – EClaesson

2

을하고 싶습니다. 이러한 방법으로 사용할 수 있습니다 : 당신이 다른 platfroms에 대한 동일한 파일 트리가있는 경우

#ifndef MAC // MAC performs #define MAC 

#ifndef WINDOWS // Windows performs #define WINDOWS 

#ifndef UNIX // Unix performs #define UNIX 

// ERROR 

#endif 

#endif 

#endif 
5

한 세트까지입니다 필요

// platform.h 

#if defined PLATFORM_A 
    #include "platform_a.h" 
#elif defined PLATFORM_B 
    #include "platform_b.h" 
#else 
    // #pragma error or whatever 
#endif 

다음 #include "platform.h".

-1

문자열 사이에 +를 사용해보십시오. 그것은 C++ 구문이어야합니다.

그래서 같은 :에 구성 명령에 의해 생성 된 사용자의 메이크, 경우에 작동합니다

#define PLATFORM_INCLUDE(file) \ 
    #include "platforms/" + DIR + "/" file 
+0

이것은 전 처리기 시간입니다. Juxtaposition은 C++ std :: string 연산자가 아닌 문자열 리터럴 연결을 얻는 방법입니다. – John

+0

하지만 전 처리기가 여러 번 통과해야하므로 완전히 작동하지 않거나 완전히 잘못 되었습니까? – EClaesson