2012-03-28 3 views
7

우리는 여러 모바일 플랫폼을 대상으로하는 복잡한 C++ 코드베이스를 사용합니다. 우리는 현재 윈도우 CE가, 안드로이드 (4.2 사람에 따라 모두 원시 CE 및 모바일 6.5)는 (2.1), 아이폰가 (4 이상), 거의 작업 우루루는 (2.0)과 아무것도 오는 경우가 새로운 C++/CX의 경우 Windows Phone (8+)을 추가 할 가능성이 있습니다. 플러스 테스트 버전 Win32 및 일부 코드를 공유하는 Win64의 서비스 응용 프로그램. 우리는 이미 리눅스에서 단위 테스트를 컴파일하려고 시도 했었고 이미 다른 리눅스 플랫폼에서도 작동하도록하기 위해 이미 너무 작은 규모의 비즈니스 볼륨이 있었지만 변경 될 수 있습니다.여러 모바일 플랫폼 용 도구 빌드

현재 각 플랫폼에 기본 도구로 코드를 컴파일합니다. 그것들 각각은 상당히 복잡하고 합리적으로 한 번의 클릭으로 빌드 할 수있는 몇 가지 해킹이 있습니다. 그리고 Bada를 위해 우리는 삼성이 조정 한 이클립스 이외의 빌드를 아직 해결하지 못했습니다.이 빌드는 생산을 위해해야 ​​할 것입니다.

지금까지는 작동하지만 점점 더 많은 유지 관리 문제가되고 있습니다. 가장 큰 문제는 현재 iPhone 빌드입니다. Visual Studio 프로젝트 파일 및 일반 makefile과 달리 손으로 XCode 프로젝트에서 파일을 추가/제거/이름을 바꿀 수 없으며 MacOS boxen과 XCode 사용 경험이있는 사람은 두 명뿐입니다. Windows 및 Visual Studio 알기). Bada 타겟을위한 Makefile을 만들어야합니다 (일반 GNU 툴체인이기 때문에 크로스 컴파일이 가능해야합니다). 그리고 안드로이드 빌드의 일부 kludges를 제거하는 중반이되지 않을 것입니다 : 버그 수정 Cygwin에서 빌드 할 때의 의존성 처리, 개미 빌드 스크립트 상단의 해킹 및 셸 (shell) 접착제로 매니 페스트를 마사지하고 모두 유지합니다.

그래서 다양한 플랫폼의 빌드 프로세스를 통합하는 방법에 대한 조언을 찾고 있습니다.

  • iPhone 및 Bada 실행 파일과 Android 빌드의 기본 부분을 처리해야합니다 (세 가지 플랫폼 모두 별도로 테스트 할 수 없기 때문에).
  • 몇 개의 공유 라이브러리, 하나의 메인 바이너리, 동일한 플랫폼을위한 하나의 테스트 바이너리 그리고 일부 플랫폼에서만 빌드 된 보조 바이너리 (현재는 Win32 전용)로 구성된 대형 프로젝트를 처리해야한다.
  • 우리는 18 일을하고 다양한 고객을 위해 약간 다른 빌드를 세기 때문에 버전 제어 시스템 및 일부 사용자 정의 변수의 빌드 구성 헤더 및 Java 파일을 생성 할 수 있어야합니다.
  • 물론 자동으로 의존성 (헤더 파일)을 처리하고 일반적으로 신뢰할 수 있어야합니다.
내가 어떤 결함을 주위에 해킹 할 준비가 나는 다른 것들에 대한

,하지만 난 분명히 쉘 덕트 테이프의 양을 유지하고 최소 침을하고 싶은, 그래서해야 :

  • 는 할 수 Visual Studio, Eclipse 및 XCode와 통합하여 각 환경이 빌드를 트리거하고 빌드 대상 제품에 빌드 제품을 업로드 한 다음 디버거를 여기에 첨부 할 수 있습니다.
  • Java를 빌드하고 Android 용 사용자 정의 패키징 도구를 호출 할 수 있으므로 Google은 지난 2 년 동안 Google이 불필요하게 호환되지 않는 방식으로 두 번 변경 한 앤트 빌드 스크립트를 해킹 할 필요가 없습니다. 다운로드).
  • 다양한 데이터 파일을 설치하고 임의의 패키지 및 임의의 다른 스크립트와 도구를 호출 할 수 있으므로 너무 많은 쉘 스크립트와 섞일 필요가 없습니다.

우리는 지금까지 시도 시작했다 CMake (시간이 많지 않은 지금까지하지 않았지만, 곧 뭔가를해야 할 것)도 약 SCons 생각했다. 그러나 이미 몇 년 전에 Windows CE 용 SCons을 사용하여 빌드를 시도했지만 Visual Studio 용 메이크 파일 유형 프로젝트를 생성하고 VS2005의 임베디드 플랫폼에서는 작동하지 않으므로 포기했습니다. CMake는 네이티브 makefile을 생성 할 수 있지만 CE에는 custom, bit out of date, branch이 필요합니다. 그래서 이 우리가 알아야 할 다른 도구인지 아니면이 도구들로 알려진 걸림돌이인지 알아야하는지 묻고 싶습니다.

업데이트 : 나는 여러 장소에서 안드로이드 네이티브 바이너리에 대한 지침을 발견했습니다 및 pixellight도 직접 포장 도구를 호출하여 APK를 생성하는 cmake 스크립트가 있습니다. 또한 this shell script에 표시됩니다. iPhone usage 여기에 설명되어있는 것 같습니다.

+0

vs android (http://code.google.com/p/vs-android/)에서 살펴보기 – Asaf

+0

@Asaf : 감사합니다.하지만 우리는 여전히 VS2008을 고수하고 있으며 지금 업그레이드하는 것은 가치가있는 것 같지 않습니다. 돈. VS는 MacOS에서 작동하지 않기 때문에 Windows에서는 작동하는 iPhone 용 타겟 컴파일러에 대해 들어 본 적이 없으므로 iPhone에는 도움이되지 않습니다. –

+0

맥은 * nix 박스가 아니니, VS로 건물을 짓지 않고 다른 C++ 컴파일러를 사용하지 않으시겠습니까? 어쨌든 코드를 수정해야 할 수도 있지만 어쨌든 모범 사례입니다. – baash05

답변

4

동일한 CMake 빌드 파일을 사용하여 내 개인적인 경험으로 최소한 Win32 (VS2005), Linux (ubuntu) 및 OS X (10.5.8 Leopard) 플랫폼에서 프로젝트를 생성하고 빌드 할 수 있습니다. 안드로이드 앱 빌드 프로세스에서 CMake를 사용하기위한 프로젝트가 여러 개 있습니다 (예 : http://code.google.com/p/android-cmake/). 이러한 모든 옵션을 사용하면 CMake를 선택하는 것이 좋습니다. 더 많은 CMake는 픽업하기 쉽고, configure.ac와 Makefile.ac 파일을 작성해 본 경험이 있다면 더 쉽습니다.

참고 : CMake 작동 방법 :

  1. 개발자/관리자가 CMakefile가 만들어집니다.
  2. Builder는 cmake를 실행하여 CMakefile을 사용하여 플랫폼 별 빌드 파일을 생성합니다. (Linux makefiles/OSX makefiles/VS 프로젝트 파일)
  3. 작성기가 빌드 명령을 시작합니다.
+0

크로스 컴파일을 위해서는 크로스 컴파일 환경에 CMake를 소개하는 툴체인 파일이 필요합니다. [CMake Wiki] (http://www.cmake.org/Wiki/CMake_Cross_Compiling)를 참고하십시오. [ios-cmake] (http://code.google.com/p/ios-cmake)와 [android-cmake] (http://code.google.com/p/android-cmake/)가 있습니다. iOS 및 Android 용 툴체인 파일을 각각 제공합니다. –

2

CMake가 가장 적합합니다. CMake 2.8.11로 시작 Windows CE는 기본적으로 지원됩니다. 해당 버전이 출시 될 때까지 CMake의 Nightly Binary을 사용할 수 있습니다.

+0

감사합니다. 볼 것이다; 우리는 현재 2.8.3을 기반으로하는 http://gitorious.org/~paroga/cmake/parogas-cmake.git에서 얻은 가지를 사용하고 있습니다. –

+0

현재 하나의 작은 문제가 있습니다.ARM은 항상 ARMV4I라고 가정하고'/ MACHINE : THUMB'을 설정해야하지만'/ MACHINE : ARM'을 가져야하는'Pocket PC 2003 (ARMV4) '에 대해서는 여전히 컴파일 중입니다. –

+0

문제는 해결하기가 쉽지 않습니다./MACHINE 플래그는 CMAKE _ * _ LINKER_FLAGS에만 나타나며 어쨌든 이전 버전에서도 약간의 조작이 필요했습니다. –

관련 문제