Linux

CMake 시작하기

Superkill 2019. 6. 16. 18:53
반응형

Step 1) CMake 기본기


실행파일 빌드하기

대부분의 CMake 프로젝트는 소스 코드파일로 부터 실행파일을 빌드하는 것 입니다.
아래 CMakeLists.txt 파일로 실행파일을 빌드할 수 있습니다.

cmake_minimum_required (VERSION 2.6)
project (Tutorial)
add_executable(Tutorial tutorial.cxx)

변수 정의 및 파일 템플릿  

CMakeLists.txt 파일에서 변수를 정의하면 파일 템플릿에서 그 변수를 사용할 수 있습니다.

다음 예제들은 CMakeLists.txt 파일에서 버전 변수를 정의하고 헤더 파일 템플릿에서 버전 변수를 사용하여 헤더 파일을 만든 후 소스 코드에서 버전값을 사용하는 방법을 보여줍니다.
이 방법으로 소스 코드 내부가 아닌 CMake 빌드 스크립트에서 버전 값을 관리할 수 있습니다.

# CMakeLists.txt 파일 내용 입니다
cmake_minimum_required (VERSION 2.6)
project (Tutorial)
# 버전 변수를 설정합니다
set (Tutorial_VERSION_MAJOR 1)
set (Tutorial_VERSION_MINOR 0)
 
# 템플릿 파일(*.in)과 템플릿 출력파일(.h)을 설정해 줍니다
# CMakeList.txt 빌드 스크립트에서 정의된 변수를 템플릿 파일에서 사용하고 있을 경우
# 빌드 직전 컴파일러를 실행하기 전에 변수 값으로 치환해 줍니다
configure_file (
  "${PROJECT_SOURCE_DIR}/TutorialConfig.h.in"
  "${PROJECT_BINARY_DIR}/TutorialConfig.h"
  )
 
# 템플릿 출력파일은 PROJECT_BINARY_DIR 경로에 생성되기 때문에
# 소스코드에서 출력된 파일을 찾을 수 있도록 경로를 추가해 줍니다
include_directories("${PROJECT_BINARY_DIR}")
 
# 실행파일 타겟을 추가해 줍니다
add_executable(Tutorial tutorial.cxx)

// TutorialConfig.h.in 파일 입니다.
// 매크로 상수에 빌드 스크립트에서 설정한 변수를 설정해 줍니다
#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@

// TutorialConfig.cxx 파일 입니다.
// 제곱근을 계산하는 간단한 프로그램 입니다
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "TutorialConfig.h"
 
int main (int argc, char *argv[])
{
  if (argc < 2)
    {
    fprintf(stdout,"%s Version %d.%d\n",
            argv[0],
            Tutorial_VERSION_MAJOR,
            Tutorial_VERSION_MINOR);
    fprintf(stdout,"Usage: %s number\n",argv[0]);
    return 1;
    }
  double inputValue = atof(argv[1]);
  double outputValue = sqrt(inputValue);
  fprintf(stdout,"The square root of %g is %g\n",
          inputValue, outputValue);
  return 0;
}

 

Step 2) 라이브러리 추가하기


 

'Linux' 카테고리의 다른 글

명령어 옵션 - 더블대쉬(--)  (0) 2018.07.04
Alpine Linux 설치  (0) 2018.04.15
package 'openjdk-7-jdk' has no installation candidate  (0) 2017.08.19
자식 프로세스 / 부모 프로세스  (0) 2017.01.04
init system (systemd)  (0) 2016.12.27