Programming Tools/CMake

[CMake] Versioning the Source Code : CMakeLists를 통해 소스코드 버전명 만들기

LiDARian 2021. 9. 6. 13:00
반응형

 

CMakeLists를 통해 프로젝트 버전명 만들기

 

CMakeLists.txt는 다음과 같이 고친다.

cmake_minimum_required(VERSION 3.21.1)

# 프로젝트명 : 실행파일 이름이 된다. 버전도 여기에 적을 수 있다.
project(OLAS VERSION 1.0)

# 헤더 파일에도 이 버전에 대해서 인지시킨다.
# Input/Output 순서로 적는다.
configure_file(OLASConfig.h.in OLASConfig.h)

# 빌드해서 나올 것들. 프로젝트명을 실행파일 이름으로 한다. 빌드 대상은 main.cpp
add_executable(${PROJECT_NAME} main.cpp)

# 헤더파일을 input에서 output으로 만드는 데 필요한 경로를 입력한다.
# version number를 기록하는데 필요하다고 한다.
target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_BINARY_DIR}) 

# 빌드할 라이브러리 지정. 하위폴더를 지정
add_subdirectory(Adder)

# Download all the Submodules
find_package(Git QUIET)
if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
    option(GIT_SUBMODULE "Check submodules during build" ON)
    if(GIT_SUBMODULE)
        message(STATUS "Submodule update")
        execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive
                        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
                        RESULT_VARIABLE GIT_SUBMOD_RESULT)
        if(NOT GIT_SUBMOD_RESULT EQUAL "0")
            message(FATAL_ERROR "git submodule update --init failed with ${GIT_SUBMOD_RESULT}. please check...")
        endif()
    endif()
endif()

# Check all the Submodules
if(NOT EXISTS "${PROJECT_SOURCE_DIR}/external/glfw/CMakeLists.txt")
    message(FATAL_ERROR "git submodules was not downloaded! GIT_SUBMODULE was turned off or failed. Please...")
endif()


add_subdirectory(external/glfw)

# 헤더파일을 추가하는 곳을 지정. #include "Adder/adder.h"라고 안적을 수 있다.
target_include_directories(${PROJECT_NAME} 
    PUBLIC Adder
    PUBLIC external/glfw/include
)

# 링크할 라이브러리를 찾는곳. 디렉토리를 빌드하기 위해 경로를 지정한다. 이때 경로는 build된 파일이 있는 경로. 즉, out/build 기준이다.
target_link_directories(${PROJECT_NAME}
    PRIVATE Adder
    PRIVATE external/glfw/src
)

# exe파일에 링크할 라이브러리
target_link_libraries(${PROJECT_NAME} adder glfw)

 

이 부분(project(OLAS VERSION 1.0))을 헤더파일을 통해서 자동으로 인식시켜서 main.cpp에서 버전명을 출력하도록 하게 할 것이다.

 

OLASConfig.h.in 파일을 만들어서 다음과 같이 입력해준다.
여기서 @OLAS_VERSION_MAJOR@와 @OLAS_VERSION_MINOR@가 CMakeLists.txt에 있는 버전 숫자로 자동으로 변환되는 것이다.

 

#define OLAS_VERSION_MAJOR @OLAS_VERSION_MAJOR@
#define OLAS_VERSION_MINOR @OLAS_VERSION_MINOR@

 

main.cpp는 다음과 같이 바꿔서 버전명이 잘 출력되도록한다.

 

#include <iostream>
#include <adder.h>
#include <GLFW/glfw3.h>
#include <OLASConfig.h>

using namespace std;


int main(int argc, char * argv[]){
   cout << "Hello" << '\n';
   cout << add(72.1, 73.8) << '\n';

   cout << argv[0] << "-Version" << OLAS_VERSION_MAJOR << "." << OLAS_VERSION_MINOR << '\n';

   // GLFWwindow *window;

   //  if( !glfwInit() )
   //  {
   //      fprintf( stderr, "Failed to initialize GLFW\n" );
   //      exit( EXIT_FAILURE );
   //  }

   // window = glfwCreateWindow( 300, 300, "Gears", NULL, NULL );
   //  if (!window)
   //  {
   //      fprintf( stderr, "Failed to open GLFW window\n" );
   //      glfwTerminate();
   //      exit( EXIT_FAILURE );
   //  }

   //      // Main loop
   //  while( !glfwWindowShouldClose(window) )
   //  {
   //      // Swap buffers
   //      glfwSwapBuffers(window);
   //      glfwPollEvents();
   //  }

   //  // Terminate GLFW
   //  glfwTerminate();

   return 0;
}

 

모두 수정했으면 다음을 쳐서 버전명이 제대로 출력되는지 확인해보자!

 

cmake -S . -B out/build
make -C out/build/
./out/build/OLAS

 


 

 


공대생지식창고 오픈카톡방

https://open.kakao.com/o/swnAyLyc

 

공대생지식창고님의 오픈프로필

공대생에게 도움이 될만한 글을 씁니다. www.knowledgeforenginners.tistory.com

open.kakao.com

 

공대생지식창고 Github

engineerJPark (github.com)

 

engineerJPark - Overview

engineerJPark has 2 repositories available. Follow their code on GitHub.

github.com

 

 

반응형