2013-06-10 1 views
6

Windows 32 비트 (MSVC++ 사용)에서 C++로 소프트웨어를 개발하고 있지만 모든 플랫폼에서 소프트웨어를 사용할 수 있기를 원하기 때문에 내 빌드 생성기로 CMake.CMake를 사용하여 Linux를 타겟팅하는 Windows에서 교차 플랫폼 빌드

따라서 저는 아직 CMake의 초보자입니다. CMake 튜토리얼에서 코드 컴파일을 교차시키기 위해서는 먼저 대상 플랫폼을 시뮬레이트하는 툴체인을 호스트 플랫폼에 설치해야한다는 것을 이해합니다. 그런 다음이 툴체인이 제공하는 적절한 대상 플랫폼 C 및 C++ 컴파일러를 사용하여 CMake는 메이크 파일 등을 생성 할 수 있습니다.

이제 Win32 플랫폼에서 Linux 플랫폼 (GNU/Linux) 용 코드를 빌드하려고합니다. 나는 Cygwin과 결합 된 CMake를 사용하고 gcc와 g ++를 컴파일러로 사용하여 위의 절차를 시도했다. 그것은 잘 만들어진 makefile을 만들었고 Cygwin 터미널에서 "make"를했을 때, 생성 된 makefile은 "만들어졌다". 이제는 리눅스 플랫폼에서 실행되기를 기대했던 실행 파일을 얻었습니다. 하지만 리눅스에서는 오류가 발생합니다. bash는 바이너리 파일을 실행할 수 없습니다.

명령 파일 executablename을 사용하여 위의 절차에 의해 만들어진 실행 파일이 Windows 용 PE32 유형임을 깨달았습니다.

내 질문은 : cmake를 사용하여 크로스 플랫폼 구축 절차에 대한 올바른 이해가 있습니까? 아니면 Windows에서 다른 Linux 도구 체인을 사용하여 Linux ELF 실행 파일을 얻어야합니까? 내가 원하는 것을 나에게 줄 수있는 툴체인은 무엇입니까?

많은 감사

Setareh

+0

저는 cmake에 대해 모르지만 qmake는 다른 플랫폼에 대해 "빌드 프로파일"을 가지고 있습니다. 어쩌면 cmake 문서에서 "대상 플랫폼"옵션을 검색해야합니다. –

+1

http://metamod-p.sourceforge.net/cross-compiling.on.windows.for.linux.html – stijn

+0

[내 컴퓨터의 qmake에 대한 mkspec 목록 예] (http://pastebin.com/raw.php ? i = 3mMjgC9p) –

답변

4

크로스 컴파일을 수행하는 경우 여기에서 보길 원할 것입니다 : http://www.cmake.org/Wiki/CMake_Cross_Compiling. 그러나, 나는 당신이 윈도우 머신에 버추얼 박스와 같은 리눅스 VM을 설치하고 리눅스에 순진하게 구축 할 것을 제안한다. 컴파일이 훨씬 빨라지고 크로스 컴파일에 대해 걱정할 필요가 없습니다. 동일한 소스 트리를 공유 할 수 있도록 Linux VM에서 Windows 디스크를 마운트 할 수 있습니다. 리눅스 VM은 윈도우에서 실행되는 gcc보다 훨씬 빨리 컴파일됩니다.

+0

답변 해 주셔서 감사합니다. 이제 제 선택권을 이해합니다. – Setareh

0
CMake에 대한 이해가 정확

... 당신이 요청하는 빌드 시스템을 만들 (또는 당신이 현재있는 플랫폼에 대한 기본값) 규칙을 기반으로하는 방법을 결정합니다 CMakeLists.txt 파일에 있습니다. 그러나 이것은 리눅스를 타겟으로 할 수있는 무언가가 설치되어 있지 않다면 반드시 윈도우 머신에서 리눅스 용으로 컴파일하는데 도움이되지는 않을 것이다.

타겟팅 리눅스를 컴파일하려면 Linux 컴파일러를 사용해야합니다. link posted by @stjin은 cygwin에 설치 방법을 알려줍니다. 그런 다음 CMake 빌드를 설정, 터미널에서 다음을 수행

CC=gcc-linux CXX=g++-linux cmake . [options] 

이 특수 리눅스 대상 컴파일러의 위치를 ​​CMake를 말할 것이다. Hopefuly,이 컴파일러로 컴파일 한 후에는 리눅스에서 실행할 수 있습니다.

+0

@Stjin 및 SethMMorton, 귀하의 의견과 링크에 감사드립니다. 그러나 metamod 웹 사이트는 바이너리 배포본을 변경 한 것 같습니다. 이제는 metamod.dll 파일 만 얻었습니다. Cygwin에서 Linux 크로스 컴파일러를 어떻게 설치할 수 있을지 전혀 모르겠습니다. 어떤 아이디어? – Setareh