반응형
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 - Overview
engineerJPark has 2 repositories available. Follow their code on GitHub.
github.com
반응형
'Programming Tools > CMake' 카테고리의 다른 글
[CMake] Library Options : 라이브러리에 옵션을 추가하기 (0) | 2021.09.07 |
---|---|
[CMake] Git Submodules/external library(서브모듈, 외부 라이브러리)를 이용하기 (0) | 2021.09.06 |
[CMake] 여러 개의 파일로 빌드하기 (0) | 2021.09.02 |
[CMake] Makefile과 CMake (0) | 2021.08.31 |
[CMake] Makefile과 CMake 학습 자료 정리 (0) | 2021.08.26 |