[CMake] CMakeLists.txt 작성C++/CMake2024. 6. 23. 21:04
Table of Contents
1. root/CMakeLists.txt
cmake_minimum_required(VERSION 3.5) # 최대한 높은 버전 사용
project(projectName VERSION 0.1.0) # 프로젝트 이름과 버전
set(CMAKE_CXX_STANDARD 20) # C++ 표준 설정
set(CMAKE_CXX_STANDARD_REQUIRED TRUE) # C++ 표준 준수를 필수로 설정
# CPM.cmake settings
# ------------------------------------------------------------------------------
file(
DOWNLOAD
https://github.com/cpm-cmake/CPM.cmake/releases/download/v0.38.3/CPM.cmake
${CMAKE_CURRENT_BINARY_DIR}/cmake/CPM.cmake
EXPECTED_HASH SHA256=cc155ce02e7945e7b8967ddfaff0b050e958a723ef7aad3766d368940cb15494
)
include(${CMAKE_CURRENT_BINARY_DIR}/cmake/CPM.cmake)
# ------------------------------------------------------------------------------
# unit test 제어 option(변수명 "설명(필수아님)"" ON/OFF)
option(UNIT_TEST_example01 "Build example01 tests" OFF)
option(UNIT_TEST_example02 "Build example02 tests" ON)
enable_testing() # 테스팅을 활성화
add_subdirectory(src/example01) # src/example01 dir에서 하위 프로젝트 추가
add_subdirectory(src/example02)
2. src/example01/CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
add_library(example01 STATIC example01.cpp) # example01.cpp를 사용해서 static lib example01 생성
add_library(pitapat::example01 ALIAS example01) # example01 별칭을 pitapat:example01로 정의
get_filename_component(PROJECT_ROOT "${CMAKE_CURRENT_LIST_DIR}/../.." ABSOLUTE) # PROJECT_ROOT 변수에 현재 CMakeLists.txt 파일이 있는 디렉토리의 부모 디렉토리 경로를 절대 경로로 저장
target_include_directories(example01 INTERFACE $<BUILD_INTERFACE:${PROJECT_ROOT}>) # example01 타겟에 대해 빌드 인터페이스로 PROJECT_ROOT 디렉토리를 포함
add_subdirectory(tests) # tests 디렉토리에 있는 하위 프로젝트를 추가
3.src/example01/tests/CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
if(UNIT_TEST_WEEK02)
cpmaddpackage("gh:doctest/doctest@2.4.9") # CPM.cmake을 사용하여 doctest 라이브러리 버전 2.4.9를 설치
set(TESTS example01_test) # 테스트 실행 파일의 이름을 example01_test로 설정
add_executable(${TESTS} example01.spec.cpp) # example01.spec.cpp 파일을 사용하여 ${TESTS}라는 이름의 실행 파일을 생성
target_link_libraries(${TESTS} # ${TESTS} 실행 파일에 대해 doctest::doctest 및 pitapat::example01 라이브러리를 링크
PRIVATE doctest::doctest
PRIVATE pitapat::example01)
include(CTest) # CTest를 활성화하여 테스트 관련 기능을 사용할 수 있도록
include(${doctest_SOURCE_DIR}/scripts/cmake/doctest.cmake) # doctest 라이브러리의 CMake 스크립트를 포함하여 테스트 설정을 추가
doctest_discover_tests(${TESTS}) # ${TESTS} 실행 파일을 doctest를 사용하여 테스트하고, 결과를 자동으로 수집
endif()
728x90
@rlozlr :: 얼렁뚱땅 개발자
얼렁뚱땅 주니어 개발자
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!