CMake란? CMake 란, make의 빌드 관리 시스템을 만들기 위한 오픈소스 프로젝트이다. CMake는 Makefile 자동 생성 및 관리를 해준다. 지정한 운영체제에 맞는 Makefile을 생성해줘서 소스코드 빌드를 편리하게 할 수 있다. 또한 의존성 정보를
target_으로 시작하는 명령어들을 사용하다보면, PRIVATE, PUBLIC, INTERFACE 키워드를 자주 볼 것이다. 우선 이 키워드들부터 개념정리를 하고 넘어가자. PUBLIC, PRIVATE, INTERFACE CMake의 PUBLIC, PRIVATE,
CMake에서 C++ 표준이나 컴파일 설정을 다루는 CMake 명령어들은 소개한다. CMake 전체에서 사용되는 기본 C++ 표준을 지정한다.모든 타겟에 적용되지만, 타겟별로 따로 설정된 표준이 있으면 그것이 우선된다.이 명령어는 프로젝트 전반에 걸쳐 C++ 표준을 설
라이브러리에서 또 다른 라이브러리를 불러와 사용하는 것은 비일비재한 일이다. 그러면 CMakeLists.txt 파일은 어떻게 정의해야 하는지 알아보자.
크로스 플랫폼은 정말 힘들 일이다. CMake에서 이 문제에 대응해보자.CMake에서도 변수가 있으며, 단순한 Boolean, 문자열, 파일 경로, 리스트 등을 표현할 수 있다.변수는 set을 사용해서 생성하고, unset을 사용해서 제거할 수 있다. 변수는 문자열 기
CMake는 전용 확장자가 없다. 최소의 Root CMakeLists.txt 호출이나 add_subdirectory는 CMakeLists.txt 파일을 사용하지만, 그렇지 않은 경우라면 보통 .cmake 파일을 사용하게 된다.위와 같은 프로젝트를 가졍해보자. add_s
만약 어떠한 라이브러리를 새로운 프로젝트에서 사용하고 싶은데 어떻게 사용하는 것이 좋을까? Visual Studio 솔루션을 만들고 경로 지정하는 방법 CMake 프로젝트를 만들어서 타겟의 속성을 설장하는 방법 한 두개의 라이브러리라면 위의 방법 중 하나를 선택해서
일반적으로 배포 할 binary 혹은 header들을 특정 디렉토리에 모으기 위해 copy 명령을 사용한다. Visual Studio의 경우, VS 프로젝트의 Build Event나 Copy Task 같은 것을 이용하게 된다. Copying Binaries on Pre
CMAKE_MODULE_PATH와 CMAKE_PREFIX_PATH는 CMake에서 모두 경로를 설정하는 변수들이지만, 서로 다른 목적과 동작 방식을 가지고 있다.주로 CMake 모듈 파일(.cmake)을 검색한다.이 변수는 사용자 정의 모듈이나 CMake가 제공하는 모
CMake의 캐시(Cache)는 프로젝트 구성 시 사용되는 중요한 메커니즘으로, 설정된 값들을 저장하고 유지하는 기능을 한다. cache는 특히 여러 번 빌드해야 하는 큰 프로젝트에서 유용하며, 사용자가 특정 값을 설정하거나 수정할 때 반복적으로 설정하지 않아도 되도록
CMake의 반복 블럭은 foreach()/endforeach()와 while()/endwhile() 명령에 의해서 제공된다.블록의 끝에 도달하지 않고 다음 반복으로 넘어가기 위해서는 continue() 명령을 사용하고, 반복을 종료하고 블록을 벗어나기 위해서는 bre
SHARED 라이브러리는 동적으로 링크되고 런타임에 로드되는 라이브러리를 의미한다.SHARED 라이브러리는 import library와 연관되어있다. import library는 구현은 제외한 심볼 정보만 가지고 있는 라이브러리이며, .lib 확장자를 가진다.SHARE
xxx-config.cmake 파일은 라이브러리나 패키지를 CMake에서 쉽게 찾을 수 있도록 구성 정보를 제공하는 파일이다. 이 파일을 사용하면, 다른 프로젝트에서 find_package(xxx)를 호출할 때 xxx 라이브러리의 위치와 설정 정보를 제공하여 자동으로
CMake 프로젝트 이외에서 작성된 기존 라이브러리와 독점 라이브러리로 소스 코드가 공개 되지 않은 라이브러리를 CMake 프로젝트에서 사용하고 싶은 경우가 있다.이러한 라이브러리를 CMake의 타겟으로 취급하기 위한 구조가 바로 IMPORTED 타겟이다. (라이브러리
빌드 시스템(build system)이 하는 일은 연속적인 이벤트(컴파일러/링커 호출)를 통해 최종적으로 프로그램을 생성하는 것이다. 빌드 시스템 파일, 혹은 프로젝트 파일은 프로그래머의 의도에 맞게 컴파일러/링커 호출을 조직화한 명령서라고 할 수 있다.CMake가 중
CMake의 생성기 표현식은 빌드 시스템 생성기를 위한 표현식이다.생성기 표현식은 $<...>의 형태를 띄고 있다. CMake parser가 메타 함수인 cmake_language() 처럼 ...의 내용을 해석해서 생성 작업을 대신해 준다고 생각하면 된다. 이것은
Package Package의 구성 보통 패키지라고 하면 RPM, Brew 처럼 관리 소프트웨어를 통해 다운로드/설치/업데이트해서 사용하는 프로그램들을 말하는데, C++ 개발자들에게 패키지란 개발에 필요한 Library + Manifest에 가까운 것 같다. 일반