답변:
Make (또는 Makefile)는 빌드 시스템입니다. 컴파일러와 기타 빌드 도구를 사용하여 코드를 빌드합니다.
CMake는 빌드 시스템 생성기입니다. Makefile, Ninja 빌드 파일, KDEvelop 또는 Xcode 프로젝트, Visual Studio 솔루션을 생성 할 수 있습니다. 동일한 시작 지점에서 동일한 CMakeLists.txt 파일. 따라서 플랫폼 독립적 인 프로젝트를 가지고 있다면 CMake는 시스템 독립적 인 빌드를 만드는 방법입니다.
GNU Make가 맹세하는 Visual Studio 및 Unix 개발자에 익숙한 Windows 개발자가있는 경우 CMake를 사용하는 것이 좋습니다.
프로젝트를 다중 플랫폼으로 사용하거나 널리 사용하려는 경우 항상 CMake (또는 다른 빌드 시스템 생성기이지만 CMake가 개인적으로 선호 됨)를 사용하는 것이 좋습니다. CMake 자체는 종속성 감지, 라이브러리 인터페이스 관리 또는 CTest, CDash 및 CPack과의 통합과 같은 멋진 기능도 제공합니다.
빌드 시스템 생성기를 사용하면 프로젝트를 미래에 대비할 수 있습니다. GNU-Make 만 사용하더라도 나중에 다른 플랫폼 (Windows 또는 내장 된 플랫폼)으로 확장하거나 IDE를 사용하려는 경우 어떻게해야합니까?
find_package()
또는 테스트 / 패키징 지원 과 같은 다른 기능도 있습니다.
CMake가 "빌드 생성기"라는 말은 일반적인 오해입니다.
기술적으로 잘못된 것은 아닙니다. 작동 방식 만 설명하지만 작동 방식은 설명하지 않습니다.
질문의 맥락에서 그들은 똑같은 일을합니다 : 많은 C / C ++ 파일을 가져 와서 바이너리로 바꿉니다.
그렇다면 실제 차이점은 무엇입니까?
CMake는 훨씬 더 높은 수준입니다. 빌드 코드를 훨씬 적게 작성하지만 범용 빌드에도 사용할 수있는 C ++를 컴파일하도록 조정되었습니다. make
내장 C / C ++ 규칙도 있지만 대부분 쓸모가 없습니다.
CMake
두 단계의 빌드를 수행합니다 그것의 낮은 수준의 빌드 스크립트를 생성 ninja
하거나 make
다른 많은 발전기 나, 그리고 당신은 그것을 실행합니다. 일반적으로 쌓여있는 모든 셸 스크립트 조각 Makefile
은 생성 단계에서만 실행됩니다. 따라서 CMake
빌드 속도가 훨씬 빨라질 수 있습니다.
의 문법은 make의 것보다CMake
외부 도구를 지원하기가 훨씬 쉽습니다 .
make
아티팩트를 빌드 하면 빌드 된 방식을 잊어 버립니다. 어떤 소스에서 만들어졌으며 어떤 컴파일러 플래그입니까? CMake
그것을 추적하고 make
당신에게 맡깁니다. 라이브러리 소스 중 하나는 이전 버전 이후 제거 된 경우 Makefile
, make
그것을 다시하지 않을 것이다.
최신 CMake
(버전 3.something으로 시작)은 "대상"간의 종속성 측면에서 작동합니다. 대상은 여전히 단일 출력 파일 (슬프게도)이지만 전 이적 (CMake 용어에서 "공개"/ "인터페이스") 종속성을 가질 수 있습니다. 이러한 전이 종속성은 종속 패키지에 노출되거나 종속 패키지에서 숨겨 질 수 있습니다. CMake
디렉토리도 관리합니다. 를 사용하면 make
파일 별 및 디렉토리 별 관리 수준을 유지할 수 있습니다.
make
플래그 파일을 사용하여 마지막 두 간격을 처리하는 데 무언가를 코딩 할 수 있지만 사용자는 스스로해야합니다. make
포함 않습니다 튜링 완전한 언어 (심지어이, 때로는 세 계산 계략을 ), 그들 모두 끔찍하다.
솔직히 말해서, 이것은 무엇 CMake
과 make
그들의 언어는 꽤 끔찍한 - 공통점
시작하기.
그러나 CMake
훨씬 적은 수의 코드 줄을 작성하십시오.