2011-09-06 5 views
3

멀티 플랫폼 (Windows, Linux) C/C++ 라이브러리 프로젝트를 구성하는 일반적인/권장 방법은 무엇입니까?크로스 플랫폼 C/C++ 프로젝트 구성

함수 이름을 지정하고 OS 의존적 인 구현 방법을 제공하고, 등을 구성하는 방법은 무엇입니까? 제발, 건설적인 아이디어 만 - "Linux를보세요.", ideas strongly welcome과 같은 조언이 없습니다.

+1

이에 대한 규칙은 하나도 없습니다. 다른 사람들은 여러 가지 이유로 다르게합니다. – Mat

+1

아이디어가 필요하고 규칙이 없습니다. – Cartesius00

+0

그런 다음 [faq] (http://stackoverflow.com/faq#dontask)를 다시 확인하십시오. 이 사이트는 모든 대답이 똑같이 (주관적) 유효한 질문에는 적합하지 않습니다. – Mat

답변

2

FS/filesystem.hpp < 보여줍니다 - 당신이에 포함 무엇 주요 일반적인 헤더 모든 프로젝트와 거기에 #define을 만들면 사람이이 파일 만 포함하고 아래에 하위 파일이 포함되어 있으면이 파일을 포함 할 파일을 가리키는 컴파일 오류가 발생합니다.

FS/리눅스/filesystem.hpp < -

위의 주요 파일에 #ifdef와 리눅스와 #include하는 리눅스에 대한 헤더

FS/창/filesystem.hpp < - #ifdef와 WINDOWS와 #include하는 창에 대한 헤더 리눅스에 구현

FS/창/filesystem.cpp < - - 창

에 대한 구현

FS/리눅스/filesystem.cpp < 위의 주요 파일그럼 내 빌드 시스템에서 "$ target"을 사용하여 빌드 당 OS 관련 소스 파일을 쉽게 포함 할 수 있습니다.

트릭은 당신이 형식 정의를 그들 만이 볼 수 있도록 사용자로부터 숨길 수있는 인터페이스를 만드는 것입니다 및 구현 세부 사항이없는

개인적으로 클래스 정의에 걸쳐 여러 OS를 위해서 #ifdefs 뒤덮 소스 파일을 미워, 유형, 머리글 등을 포함하고 있으며, 나는 읽기 쉽도록 명료성과 편의성을 위해 모든 것을 조각화하는 것을 선호합니다.

4

많은 의존성은 사용하는 빌드 시스템에 따라 다릅니다. 많은 크로스 플랫폼 빌드 시스템에는 자체 구성 방식이 있습니다. 코드 자체에 관해서는

, 그것은 헤더를 제공하기 위해 드물지 않다, 그러나 주어진 시스템의 구현 파일에 대한 링크, 그래서 당신은 할 수 있습니다 :

system.h 
system_linux.cpp 
system_windows.cpp 
system_osx.cpp 
... 

을 ... OS에 의존 물건의 수집.

하지만 모두 가장 좋은 방법은 실제로 (Linux보다 작은) 다중 플랫폼 프로젝트를 보는 것입니다. P.

2

CMake는 많은 플랫폼에서 좋은 메타 빌드 시스템입니다. 부스트는 대부분의 플랫폼에서 작동합니다. Qt도 매우 좋습니다.

의존성을 낮게 유지하려고 시도하십시오.

CMake 플랫폼에 대해 플랫폼 독립적 인 방식으로 질문을 해봅시다. Boost와 Qt는 플랫폼을 추상화하므로 걱정할 필요가 없습니다 (그만큼).

+0

+1 부스트와 Qt를 사용하여 플랫폼을 추상화합니다. 사실 Windows 나 Unix API를 사용할 필요가 없습니다. –

2

내가 사용하는 접근법은 모든 OS 관련 기능을 내 인터페이스로 랩핑하는 것입니다. 그런 다음 각기 다른 OS (주로 Windows 및 Linux)에 대해이 인터페이스를 구현합니다.

컴파일 타임에 전처리기를 사용하여 플랫폼을 확인한 다음 적절한 버전을 포함시킵니다.

스레드, 디스크 I/O 및 클럭/시간이 많습니다.

예를 들어

:

나는이 예로서 종속 헤더/소스 파일을 저장할 폴더를 사용
#ifdef _WIN32 

#include <windows.h> 
#include "windows_code.h" 

#elif __linux 

#include <unistd.h> 
#include <pthread.h> 
#include "linux_code.h" 

#else 
#error "Unrecognized Platform" 
#endif