[CMake 설치]

sudo apt install cmake

 

[CMake 주요 문법]

- 변수

set(변수명 값)

set(변수명 "값1 값2") => 공백있는경우 쿼터사용

set(변수명 값1 값2) => 직렬화

 

- 출력

message(${변수명})

message(문자열)

message(타입 문자열)

* 출력타입

STATUS : 상태 메시지
WARNING : 경고 메시지
SEND_ERROR : 에러 메시지를 출력(Makefile생성X)
FATAL_ERROR : 에러 메시지 출력 후 작업 중단
AUTHOR_WARNING : 디버깅 메시지

- 프로젝트명 

project(sampleProject) => 프로젝트명 설정을 설정하면 CMAKE_PROJECT_NAME이라는 변수에 저장된다.

- CMake 버전관리

CMAKE_MINIMUM_REQUIRED(VERSION x.xx)

=> 최소 cmake 버전을 명시한다.

=> 최소 버전보다 낮은 cmake를 사용한다면 에러를 출력한다.

 

- 최종빌드 바이너리

ADD_EXECUTABLE(바이너리명 소스코드명 소스코드명)

 

- 최종빌드 라이브러리

ADD_LIBRARY(라이브러리명 소스코드명)

libcmaketest.a 파일이 생성된다.

SHARED(동적 라이브러리) : DLL(Windows), SO(Linux)

STATIC(정적 라이브러리) : LIB(Windows), A(Linux) => 디폴트

 

- 컴파일러 설정

SET (CMAKE_C_COMPILER "gcc" )

=> 환경변수 설정이 되어있지않다면 절대경로로 지정해준다.

 

- 컴파일 옵션

ADD_COMPILE_OPTIONS(-g -W)

 

- 전처리기 매크로

ADD_DEFINITIONS(-DDEBUG=1)

=> 해당 구문은 cmake파일 어디에 두어도 정상 동작한다.

=> gcc에서 -D 옵션

 

- 헤더파일 디렉토리 추가

INCLUDE_DIRECTORIES(/${PATH}/include)

=> 해당 구문은 cmake파일 어디에 두어도 정상 동작한다.

=> gcc에서 -I 옵션

 

- 라이브러리 디렉토리 지정

LINK_DIRECTORIES(/lib /usr/lib)

=> /lib과 /usr/lib를 링크 시 필요한 라이브러리를 참조하도록

=> gcc에서 -L 옵션

 

- 링크옵션 추가

LINK_LIBRARIES(WS2_32)

=> gcc에서 -l 옵션

 

- 출력디렉토리 지정

SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ../)  => 바이너리

SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ../)   => 동적 라이브러리

SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ../)   => 정적 라이브러리

 

[CMake 샘플 코드]

[CMake를 이용해 프로젝트 빌드]

 

 

 

 

 

* https://cmake.org/

 

CMake

CMake is an open-source, cross-platform family of tools designed to build, test and package software. CMake is used to control the software compilation process using simple platform and compiler independent configuration files, and generate native makefile

cmake.org

* https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/Useful-Variables

 

Useful Variables · Wiki · CMake / Community

CMake Wiki

gitlab.kitware.com

 

'C&C++' 카테고리의 다른 글

How to use constructor and destructor in C language  (0) 2024.04.24
Errno Setting Function List  (0) 2024.01.17
How To Use Unit Test In C++  (0) 2020.01.13
WINAPI How To Hook ConnectEx  (0) 2019.11.06
WINAPI DLL_PROCESS_DETACH  (1) 2019.08.08

+ Recent posts