본문 바로가기

IT/Basic

cmake란?

CMake 란

CMake는 다양한 빌드(Build) 도구 중 하나 이다. 

- Build 도구 없이 IDE를 통해 빌드하고 배포할 때 발생하는 가장 큰 재앙은 운영환경에 배포되는 version이 개발자의 PC 에 의해 결정된다는 것 --> 다양한 운영체제에서 문제없이 빌드하기 위해 필요함. 

 

cmake의 gui는 명료하다.
상단에 Source file이 들어있는 src 폴더를 지정하고,
Build 할 경로폴더를 지정한 뒤,
하단의 Generate을 하면 1차 생성, 그리고 Configure 을 하면 완료된다.
Generate 할 때, VS version을 맞춰서 설정해야 하고,
Open project를 해서 Visual studio에서 최종 빌드를 한다. 

- Github의 source code를 빌드하기 위해선 위의 과정을 따르면된다.
왜냐면 거의다 CMakeLists.txt 이 이미 다 잘 작성되어있기 때문이다. 

 

1. cmake에서 source 경로설정된 폴더 안에 CMakeLists.txt 가 있어야 한다.
2. 이 CMakeLists.txt에는 Project 명, add_subdirectory (폴더명) 이 있어야 하고,
3. 하위폴더에는 main.cpp 와 같은 소스파일이 있어야 하고, 역시 CMakeLists.txt도 있어야 한다.
4. 이 CMakeLists.txt 에는 ADD_EXECUTABLE (소스 파일) 을 작성한다.

이런 형태로 CMake 에서 src, build를 하면, 문제가 없다면, Generate되고 Configure 까지 완료 될 것이다. 그리고 VS로 옮겨서 build 할 수 있다 . 


Linux환경에서 C++ 언어를 사용한다고 하면 이 Make와 Makefile를 이용해서 빌드을 해야합니다. 하지만, 프로젝트가 커지면 커질 수록 Makefile에 의존성 관계를 관리하는게 쉽지만은 않습니다.

그래서 이 Makefile을 만들어 주는 툴이 있는데 이게 CMake입니다.


CMake는 각각 소스의 내용을 파악하고 의존성 정보를 알아서 작성하고 Makefile를 추상화 작업을 하여 Meta데이터로서 Makefile를 관리한다는 프로그램입니다.

사실 Makefile를 직접 작성해서 관리하는 건 거의 없습니다. 보통 이 CMake를 통해 Makefile를 관리하고 make를 통해 빌드를 하는게 일반적입니다. 이 일반적도 한 10년전 이야기입니다. Visual studio가 있는데, 굳이..


먼저 CMake를 사용하기 위해서는 cmake를 설치해야 합니다.

 

cmake 빌드 과정

 

[C++] CMake의 사용법

안녕하세요. 명월입니다. 이 글은 CMake의 사용법에 대한 글입니다. 제가 이전에 Make와 Makefile의 작성법에 대한 설명을 한 적이 있습니다. 링크 - [C++] Make와 Makefile 작성법 Linux환경에서 C++ 언어를 ��

nowonbun.tistory.com

 


 Makefile 튜토리얼에서는 C 프로젝트를 빌드하기 위한 Makefile을 작성하는 방법에 대해 다뤘습니다. 이번 글에서는 Makefile을 보다 쉽고 편리하게 작성할 수 있는 툴인 CMake에 대해 소개하고, 동작 원리를 소개하도록 하겠습니다.

 

Make의 아킬레스건: 항상 신경써야 하는 Makefile 유지/보수

"소스코드를 수정해서 의존성이 바뀔 때마다 Makefile에 보고해야 한다.
그렇지 않으면 당신의 빌드를 비비 꼬이게 만들어 주겠다."

 

Make는 쉘 스크립트 기반 빌드에 비해 편리하지만, 프로젝트의 규모가 거대해지면서 관리해야 할 소스 파일들이 많아지고 의존성 관계가 서로 복잡하게 뒤엉키면 점점 그 한계를 드러내기 시작합니다. Makefile 자체적으로 의존성을 파악하고 어느 정도 자동화를 해 주긴 하지만, 이는 어디까지나 Makefile에 기술된 의존성 정보가 소스코드의 내용에 부합하게 올바르게 관리되고 있다는 것에 전제합니다.

 

'Makefile에 기술된 의존성 정보'란 다음과 같이 Object파일이 의존하는 소스코드나 헤더 파일을 기술한 구문을 의미합니다.

 

Make에서는 의존성 정보를 검사할 때 소스파일까지 일일이 뒤져서 어떤 헤더파일이 포함되어 있는지 조사하지 않으므로, Makefile에 의존성 정보가 잘못 기술되어 있으면 빌드시 변경 사항이 제대로 반영되지 않는 소위 '빌드가 꼬이는'상황이 발생합니다. 이렇게 빌드가 꼬이면 매번 Clean build를 해야 하므로 결국 Make의 가장 강력한 기능 중 하나인 Incremental build를 활용할 수 없게 됩니다.

 

 

참고로, cmake를 실행하면 프로젝트 디렉토리에 다음과 같은 파일과 디렉토리가 자동으로 생성됩니다.

  • Makefile
  • CMakeCache.txt
  • cmake_install.cmake
  • [CMakeFiles]

 

 

 

 

[CMake 튜토리얼] 1. CMake 소개와 예제, 내부 동작 원리 - ECE - TUWLAB

▶ Makefile 튜토리얼에서는 C 프로젝트를 빌드하기 위한 Makefile을 작성하는 방법에 대해 다뤘습니다. 이번 글에서는 Makefile을 보다 쉽고 편리하게 작성할 수 있는 툴인 CMake에 대해 소개하고, 동작

www.tuwlab.com

'IT > Basic' 카테고리의 다른 글

load, store 명령어 / 메모리 계층  (0) 2020.07.15
비트 연산  (0) 2020.07.09
cache  (0) 2020.06.30
객체 지향 프로그래밍  (0) 2020.06.30
context switching  (0) 2020.06.30