크로스 컴파일의 경우 최상의 선택은 CMake 또는 Autotools입니다. 특히 여러 아키텍처/플랫폼에 대한 코드를 컴파일 할 수있는 경우. 필자는 일반적으로 단위 테스트 목적으로 모든 코드를 기본 플랫폼에서 컴파일하고 대상 플랫폼에서 모든 코드를 컴파일합니다. CMake는 크로스 컴파일 된 라이브러리가 어디에 살고 있는지 지정할 수 있기 때문에이를 잘 처리합니다. 따라서/usr/lib에있는 크로스 컴파일 된 libpng를 검색하는 대신 빌드 머신에 도구 체인 라이브러리가 설치되어있는 곳이면/opt/arm-eabi-gcc /를 살펴야합니다. 서로 다른 변형에 대해 여러 개의 빌드 디렉토리를 만들고 make를 사용하여 각 변형을 수동으로 컴파일하거나 반복적 인 방법으로 반복적 인 make로 롤을 트리거 할 수 있습니다.
개미에는 바닐라 메이크처럼 기본적으로 좋거나 나쁘다는 단점이 있습니다. 단점은 C 또는 C++에서 특히 주류가 아닌 것을 사용하고 있다는 것입니다. 라이브러리 나 실행 파일의 헤더 파일과 같은 내부 파일과 타사 라이브러리와의 연결과 같은 외부 종속성과 같은 자체 의존성을 모두 처리해야합니다. 게다가 Ant C 태스크가 실제로 그렇게 많이 유지되지는 않는다고 생각합니다. 임무 작업으로 GCC를 호출하는 C 옹호자를 위해 Ant를 사용하는 사람은 누구나 보았습니다.
SCons가 더 좋지만 크로스 컴파일은 장점이 아닙니다. 그것은 CMake 또는 Autotools와 같은 "빌드 시스템"이 아니며 빌드 도구 일뿐입니다. 위키에서 말한대로 it is pretty much "Make in Python". 의존성에 대한 처리 기능이 내장되어 있습니다. 즉, "gcc -MM -MD"또는 그 자체로 롤백 할 필요가 없으므로 Make보다 이점입니다. SCons는 설치된 타사 라이브러리를 검색하는 기능도 지원하지만 대개의 방식으로 빌드 시간을 크게 늘릴 수 있습니다. 다른 시스템과 달리, SCons는 대부분의 결과가 캐싱되지만 검사 단계를 실행합니다. SCons는 긴 빌드 시간으로 인해 악명이 높지만 문제가되지 않는 파일은 50 개입니다. SCons의 교차 컴파일 지원은 존재하지 않습니다. - 자신을 굴려야합니다. as discussed on this thread on the mailing list. 일반적으로 빌드를 Unix 플랫폼처럼 강제 실행 한 다음 C 컴파일러의 이름을 무시합니다. 여러 변종을 만들거나 소스 디렉토리에서 빌드 디렉토리를 분리하면 코드가 얽혀서 코드를 교차하고 네이티브로 컴파일 할 때 적합하지 않게됩니다.
CMake 및 Autotools는 종속성 문제가 매우 잘 발생하고 autotools의 교차 컴파일 지원이 성숙합니다. CMake는 2008 년 4 월에 릴리스 된 버전 2.6.0부터 크로스 컴파일을 수행했습니다. 이러한 기능을 무료로 제공하고 패키징 및 유닛 테스트 ("확인 확인"또는 유사한 대상)를 실행하는 것과 같은 기능을 제공합니다. 이 두 도구의 단점은 부트 스트랩이 필요하다는 것입니다.CMake의 경우 Makefile 또는 Visual Studio 솔루션 파일을 만들려면 CMake 바이너리가 설치되어 있어야합니다. Autotools의 경우에는 소프트웨어를 컴파일하는 모든 사람이 automake와 autoconf가 설치되어 있어야하고, 빌드 시스템을 변경해야하는 사람 (빌드 시스템 변경시 새 파일을 추가해야 함) 만 필요하기 때문에 약간 더 복잡합니다. 2 단계 부트 스트래핑 (configure.ac -> configure, configure + Makefile.in -> Makefile)은 개념적으로 조금 까다 롭습니다.
편집 대상 : 크로스 컴파일은 프로그램 및 라이브러리의 자동 감지에 복잡성을 추가하기 때문에 빌드 시스템에서 추가 골칫거리입니다. SCons는이 문제를 다루지 않는다. 개미도 마찬가지입니다. autoconf는 autotools의 경우 이것을 처리하지만, 링크 단계에서/usr/lib를 사용하려고 할 때 연결이 끊어 지거나 직면 할 때 명령 행에 "--with-libfoobar =/some/path"를 제공해야 할 수도 있습니다 . CMake의 접근법은 툴체인 파일에 조금 더 많은 영향을 미치지 만, 이는 사용자가 알아 낸대로 툴과 라이브러리 (CC, CXX, RANLIB, --with-ibfoo = 등)를 모두 지정할 필요가 없다는 것을 의미합니다. 표준 협약. 이론적으로 CMake toolchain 파일을 여러 프로젝트에서 재사용하여 크로스 컴파일 할 수 있습니다. 실제로 CMake는 평범한 해커가 편리하게 사용할 수 있도록 충분히 넓지는 않지만 독점적 인 프로젝트를 여러 개 만들 경우 유용 할 수 있습니다.