DevOps

CMake 튜토리얼 - 2

게임이 더 좋아 2022. 9. 20. 15:57
반응형
728x170

[DevOps] - CMake 튜토리얼 - 1

 


 

이번에는 라이브러리를 추가해서 빌드하는 방법이다.

C++에서는 바로 square root 계산이 불가능하다.

내가 직접 구현하지 않는 이상.. 어디 라이브러리를 이용하는 것이 편하다.

아니면.. 그냥 cmath 쓰던가?

 

그럼 이제 라이브러리를 추가하는 작업을 CMakeLists.txt 에 추가해야 한다.

이번에 내가 추가할 MathFunctions는 MathFunctions 이라는 하위 디렉터리에 라이브러리를 넣을 생각이다.

즉, 헤더파일하고 source file도 넣을 예정이다. 소스에는 mysqrt라는 내 라이브러리에서 가져온 메서드를 쓸 생각이다.

 

새로운 라이브러리를 추가할 때는 아래 키워드를 쓴다.

 add_library({library_name} {file_name})

을 쓴다.

 

만약 최상위 CMakeLists.txt 에서 라이브러리를 추가하려면 subdirectory를 설정하면 된다.

add_subdirectory()

이다.

다시 말해서 하위 디렉토리의 CMakeLists.txt에 있는 라이브러리에서만 할 수도 있고

그 상위 CMakeLists.txt에서도 라이브러리를 가져올 수 있다.

 

 

최상위 CMakeLists

cmake_minimum_required(VERSION 3.10)

# set the project name and version  => 어떤 프로젝트를 빌드할지
project(Tutorial VERSION 1.0)

# specify the C++ standard => C++11로 하겠다는 뜻. C++11을 표준으로 하겠다.
# add executable 하기 전에 선언해야 한다.
set(CMAKE_C++_STANDARD 11)
set(CMAKE_C++_STANDARD_REQUIRED True)

# => USE_MYMATH 를 ON 즉,내 것을 쓰겠다.
option(USE_MYMATH "Use tutorial provided math implementation" ON)

# configure a header file to pass some of the CMake settings to the source code
# 헤더 파일을 소스 코드에 등록 => 현재 내가 가진 TutorialConfig.h.in 파일을 TutorialConfig.h 파일로 소스코드에 등록하겠다.
# => 소스코드에서 TutorialConfig.h 인클루드 가능
configure_file(TutorialConfig.h.in TutorialConfig.h)


#Why is it important that we configure TutorialConfig.h.in after the option for USE_MYMATH? option은 지켜야 한다.


#위의 option에서 선택한 것이다.  ON 되어있다면 sub directory를 추가하고 등록한다.
if(USE_MYMATH)
# add the MathFunctions library => Library 경로
  add_subdirectory(MathFunctions)
#변수 추가
  list(APPEND EXTRA_LIBS MathFunctions)
  list(APPEND EXTRA_INCLUDES "${PROJECT_SOURCE_DIR}/MathFunctions")
endif()


# add the executable => 어떤 소스 파일을 가져올지
add_executable(Tutorial tutorial.cpp)

#lib 링크 => MathFunction이 되겠다.
target_link_libraries(Tutorial PUBLIC ${EXTRA_LIBS})


# add the binary tree to the search path for include files so that we will find TutorialConfig.h
#이건 내가 좀 더 알아보겠다.
target_include_directories(Tutorial PUBLIC
                           "${PROJECT_BINARY_DIR}"
                           ${EXTRA_INCLUDES}
                           )

 

MathFunctions의 CMakeLists

add_library(MathFunctions mysqrt.cxx)

저렇게만 추가하면 이전글과 같이 

CMake 파일 만들고 build를 하면 된다.

 

 


참고 링크

https://cmake.org/cmake/help/latest/guide/tutorial/A%20Basic%20Starting%20Point.html

 

728x90
반응형
그리드형