2012-04-27 2 views
13

Linux 도구를 Windows로 포팅하는 동안 문제가 있습니다. Windows 시스템에서 MinGW를 사용하고 있습니다. 나는이 라인은 내의 모든에서/출력을 처리하고 클래스를 가지고 :mkdir Windows vs Linux

mkdir(strPath.c_str(), 0777); // works on Linux but not on Windows and when it is changed to 
_mkdir(strPath.c_str()); // it works on Windows but not on Linux 

이 두 시스템에서 모두 작동 할 수 있도록 내가 할 수있는 어떤 아이디어?

+1

당신이에있는 시스템을 파악하고 올바른 하나를 사용할 수 있습니다. '#ifdef LINUX ... #else ... # endif'와 같은 것 – twain249

+5

조건부 컴파일? –

+7

* Aside * : '777'이 아니라 '0777'을 사용한다는 의미입니다. 그들은 매우 다른 숫자입니다. –

답변

26
#if defined(_WIN32) 
_mkdir(strPath.c_str()); 
#else 
mkdir(strPath.c_str(), 0777); // notice that 777 is different than 0777 
#endif 
+0

Thx, 빠른 도움말 – MindlessMaik

+2

"_WIN32 - Win32 및 Win64 용 응용 프로그램에 정의". (ref : http://msdn.microsoft.com/en-us/library/b0084kay.aspx) 따라서 _WIN64에 대한 검사는 여기에서 필요하지 않습니다. – cweston

+0

참고로, 그 점을 잘 알고 있습니다. 단락 회로 평가는이 경우에도 문제가됩니다. – gcochard

3

조건부 컴파일을 사용하여 컴파일하는 OS에 적용되는 버전을 사용할 수 있어야합니다.

또한 정말로 플래그를 777로 설정 하시겠습니까? (열린 상태에서 바이러스를 여기에 기탁하십시오)?

+0

+1! ;) – Benj

+0

위험에 처해 있습니다. – Jon

1

당신은 조건부 일부 처리기 지시문, 당신이 여기에서 찾을 수있는 꽤 전체 목록으로 컴파일 할 수 C/C++ Compiler Predefined Macros

#if defined(_WIN32) 
    _mkdir(strPath.c_str()); 
#elif defined(__linux__) 
    mkdir(strPath.c_str(), 0777); 
// #else more? 
#endif 
+0

그리고 만약 그것이 _WIN64라면 그냥 아무것도하지 마세요 ??? –

+5

@EricJ. -'_WIN32'는 64 비트 창에서도 정의됩니다. – birryree