CMake Profiles를 수정해서 Debug, Release 등 여러 설정이 가능하다.
기본적으로 Debug라서 assert
함수가 적용된다. Release로 설정하면 assert
가 제외되어 컴파일한다.
assert
를 사용할 때 주의할 점이 있는데, assert
문 자체가 Debug가 아니면 없어진다.
그래서 assert
문 내부에 항상 실행되어야 하는 함수를 넣으면 안된다.
적용해보고 깃헙 링크 남기기
- CLion 참고 문서 테스트 부분 링크
- https://coderefinery.github.io/cmake-workshop/testing/#exercises-testing-with-ctest
- https://cmake.org/cmake/help/book/mastering-cmake/chapter/Testing%20With%20CMake%20and%20CTest.html
CTest는 CMake와 함께 기본적으로 제공되는 테스트 도구로, C++ 프로젝트에서 테스트를 작성하고 관리하는 데 유용합니다. Google Test와 같은 외부 프레임워크를 사용할 필요 없이 CTest만으로도 충분히 강력한 테스트 환경을 구축할 수 있습니다. 아래는 CTest를 사용하여 테스트 코드를 작성하고 실행하는 방법입니다.
프로젝트 디렉토리는 다음과 같은 구조로 설정할 수 있습니다.
my_project/
├── CMakeLists.txt
├── src/
│ └── main.cpp
├── include/
│ └── my_project.h
└── tests/
├── CMakeLists.txt
└── test_main.cpp
cmake_minimum_required(VERSION 3.10)
project(MyProject)
set(CMAKE_CXX_STANDARD 11)
# 소스 및 헤더 파일 포함
include_directories(include)
add_subdirectory(src)
add_subdirectory(tests)
# CTest 활성화
enable_testing()
# 소스 파일 추가
add_library(MyProjectLib main.cpp)
# 실행 파일 추가 (필요시)
add_executable(MyProjectExecutable main.cpp)
target_link_libraries(MyProjectExecutable MyProjectLib)
# 테스트 파일 추가
add_executable(MyProjectTests test_main.cpp)
# MyProject 라이브러리 링크
target_link_libraries(MyProjectTests MyProjectLib)
# 테스트 추가
add_test(NAME ExampleTest COMMAND MyProjectTests)
#include <iostream>
#include "my_project.h"
int main() {
// 간단한 테스트 예제
if (1 + 1 != 2) {
std::cerr << "Test failed: 1 + 1 != 2" << std::endl;
return 1;
}
std::cout << "All tests passed!" << std::endl;
return 0;
}
결과에 따라 0,1 반환
mkdir build
cd build
cmake ..
make
ctest
-
루트
CMakeLists.txt
:enable_testing()
을 호출하여 CTest를 활성화합니다.add_subdirectory()
를 사용하여 소스 및 테스트 디렉토리를 추가합니다.
-
src/CMakeLists.txt
:- 라이브러리 및 실행 파일을 정의합니다.
-
tests/CMakeLists.txt
:- 테스트 실행 파일을 추가합니다.
add_test()
를 사용하여 CTest에 테스트를 등록합니다.
-
테스트 코드 (
tests/test_main.cpp
):- 간단한 테스트를 포함하는 실행 파일을 작성합니다. 이 예제에서는 1 + 1이 2인지 확인하는 테스트를 포함합니다.
이렇게 하면 CTest를 사용하여 C++ 프로젝트에서 테스트를 작성하고 실행할 수 있습니다. 더 복잡한 테스트와 다양한 테스트 케이스를 추가할 수 있으며, CTest를 통해 일관되게 테스트를 관리할 수 있습니다.
이 자료들을 참고하여 CTest를 활용한 테스트 환경을 더욱 깊이 이해하고 활용할 수 있습니다.