2009-05-21 4 views
2

큰 문제가 있습니다. Linux OS에서 linux make file을 사용하여 파일을 컴파일했습니다.make --- linux and windows formats

Windows에서 동일한 파일을 명령 프롬프트로 작성하여 동일한 파일을 컴파일하려고합니다. 이를 위해 나는 nmake 유틸리티와 Cygwin 유틸리티도 가지고 있습니다.

나는 .. 간단하게 파일과 함께 간단한 프로그램을 성공적으로

을 그 짓을하지만 난 복잡한 메이크업 파일과 복잡한 C 파일을 사용 할 때 컴파일 할 수 없습니다.

리눅스의 '/'파일을 '\'창으로 변경했습니다. 아무거나?

'윈도우에 특별한 파일 형식이 있습니까?'알고 싶습니다. 또한

그들 사이의 차이

..

은 그 필요에 정말입니다 ...

+2

메이크 파일 형식에 문제가 있습니까? makefile이 Windows에 없거나 뭔가를 실행하려고하는 일부 Linux 라이브러리를 참조 할 수 있습니다. MySQL과 링크하기 위해 일반적으로 'mysql_config --libs'를 실행하여 MySQL 라이브러리 목록을 얻는다. – qrdl

+1

NMake는 다양한 * nix 버전이 서로 호환되는 것보다 * nix 버전의 make와 더 호환되지 않습니다. NMake와 make 모두에서 작동하는 파일을 작성할 수는 있지만, Windows에서 여러 가지 실제 make를 사용할 수 있으므로 노력할 가치가 없습니다. make가 선택되면 나머지 명령 문제가 나타납니다. – RBerteig

답변

5

불행히도, nmake는 make에 의해 느슨하게 영감을 받았으며 많은 중요한 일을 제대로하지 못했습니다. 가장 쉬운 방법은 두 플랫폼 모두에서 동일한 맛을 내기 시작하는 것입니다.

리눅스에서는 Gnu make가 기본 옵션입니다.

Windows의 경우 Gnu make에 대한 몇 가지 소스가 있으며 선택할 수있는 몇 가지 단점이 있습니다. 개인적으로는 주로 native win32 build of Gnu make from the GnuWin32 project을 사용합니다. 다른 프로젝트 패키지들 중 일부는 유용 할 것이기 때문에 프로젝트 패키지의 나머지 부분을 둘러 볼 수 있습니다.

대체 소스는 CygwinMinGW32/MSYS입니다.

Cygwin은 Windows 커널 위에 * nix 호환 환경을 제공하는 믿을만한 시도입니다. 이것은 Windows API를 통해 구현 된 * nix (특히 POSIX) 시스템 호출의 막대한 부분을 내보내는 DLL로 구성됩니다. 그 DLL은 또한 디스크 마운트에 대한 자체 아이디어를 가지고 있으며 * nix 스타일 경로 이름을 선호합니다. DLL 자체는 라이센스 GPL (상용 ​​라이센스가 유료로 제공 되긴하지만)이며, Cygwin 환경에서 빌드 된 프로그램은 기본적으로이를 요구하므로 고려해야 할 요소가 될 수 있습니다.또 다른 요소는 Cygwin이 일반적인 Windows 사용자에게는 친숙하지 않기 때문에 Unix 사용자가 대처할 수없는 개발 프로젝트가 일반적으로 어려워집니다. 그러나 크로스 플랫폼 개발자의 경우 Cygwin은 Makefile에 필요한 일반적인 의심되는 유틸리티 프로그램을 모두 얻을 수 있으므로 Cygwin 환경을 대상으로하는 GCC와 MinGW32 기본 Windows 대상 GCC를 포함하므로 유용합니다.

MinGW32는 네이티브 Windows 실행 파일로 실행되도록 GCC 컴파일러를 이식하는 작업을 훌륭하게 수행 한 포팅 프로젝트입니다. 그들이 제공하는 헤더 파일과 함께 사용된다면 거의 모든 Windows API를 최신 Windows 설치와 함께 제공되는 C 런타임 DLL을 통해 사용할 수 있습니다.

MSYS는 일반적인 * nix Makefile에 의해 일반적으로 존재한다고 여겨지는 최소한의 유틸리티 집합 (* nix 셸로 시작하는)을 포함하는 경량 포크의 Cygwin입니다. Cygwin과 달리 MSYS는 기본 대상이 기본 Windows API가되도록 구성됩니다.

여기에 힌트를 얻으려는 의도가 있습니다. 아마도 평평한 상태 여야합니다. 호환성 문제는 사용하는 방언으로 끝나지 않습니다.

Makefile 언어 자체는 사용 가능한 명령 셸에 크게 의존하며, 가장 중요한 프로젝트 Makefile은 * nix의 cp 및 rm과 같은 핵심 유틸리티를 사용하여 끝납니다.

Make의 GnuWin32 빌드로 시작하고 MinGW32와 MSYS를 설치하는 것이 좋습니다. 따라서 MSYS와 리눅스 모두에서 작동하는 Makefile을 작성하는 것은 상대적으로 쉽고 플랫폼 별 로직을 약간만 필요로합니다.

0

nmake를 알았지 차이가 ​​메이크업보다는의 OS 버전 사이에 일반적으로 당신의 메이크 파일을 읽어야합니다.

큰 문제는 대상 플랫폼이 실제로 무엇인지,이 코드를 Windows에서 기본적으로 작동 시키려고하는지 또는 Cygwin에서 실행하려고하는지 여부입니다.

+0

감사합니다. 나는 NMAKE.EXE 1.50을 사용하고 있습니다 ... 나는 그게 문제라고 생각합니다. 또한 명령 프롬프트에서 PATH = C : \ cygwin \ bin; % PATH % 경로를 설정했습니다. 나는 그들 사이에 형식/구문 차이가 있는지 알고 싶습니까? –

+0

나는 nmake를 잘 모르기 때문에 아래에있는 사람들 중 한 명과 함께 확인하십시오. 가능한 경우이 답변에서 허용되는 답변을 삭제하고 아래 답변 중 하나에 적용하는 것이 좋습니다. 그들은 내가하는 것보다 확실히 받아 들일 만하다. – Lazarus

0

두 플랫폼 모두에서 gnumake를 사용하십시오. 나는한다. 나는 수년 동안 Visual C를 사용하지 않았습니다.

1

크로스 플랫폼 제작에는 CMake를 고려해야하지만 실제 문제는 '/'를 '\'로 변경하지 않아야한다는 것입니다. cygwin 또는 msys (권장)에서 실행하는 경우이 옵션을 처리해야합니다.

+1

Windows에서는 슬래시를 역 슬래시뿐만 아니라 디렉토리 구분 기호로 해석하기 때문에 (잘못 작동하는 프로그램이 자체 경로 구문 분석을하지 않는 한 "명령 C :/some/thing"은 " 명령 C : \ some \ thing ". – ephemient

1

NMake는 Windows 도구이며 Windows 스타일 경로, 즉 드라이브 문자와 백 슬래시가있는 경로 만 구문 분석합니다. 따라서 cygwin과 함께 설치된 GNU Make를 사용해야합니다.

0

nmake는 윈도우 자체가 아니라 자체 포맷이므로 메이크 파일 형식은 OS보다는 도구를 만드는 것과 관련이 있습니다. gmake 만 사용하는 것을 고려하기 전에 사람들이 제안한 것처럼 단순한 것의 형식은 g (nu) make와 nmake와 비슷합니다.

+0

고마워 ... 두 형식이 모두 같은가요? –

+0

매우 기본적인 것들에 대해서만 –