CMake는 복잡한 빌드 시스템을 관리하는 강력한 도구로, 다양한 디버깅 및 로그 기능을 제공하여 빌드 과정을 분석하고 문제를 해결하는 데 도움을 준다. 이 섹션에서는 CMake에서 디버깅을 수행하는 방법과 로그를 효과적으로 활용하는 방법에 대해 설명한다.

CMake에서의 디버깅 방법

메시지 출력

CMake에서 디버깅의 첫 번째 단계는 message() 명령어를 사용하는 것이다. 이 명령어를 사용하면 CMakeLists.txt 파일 내에서 중요한 정보를 출력할 수 있다. message() 명령어는 다양한 로그 레벨을 지원하며, 이를 통해 빌드 과정에서 발생하는 문제를 추적할 수 있다.

이 명령어를 사용하면 변수의 값, 조건문의 실행 경로, 외부 패키지의 로드 상태 등을 확인할 수 있어 디버깅에 매우 유용하다.

CMake 디버그 모드

CMake는 자체적으로 디버그 모드를 지원하지 않지만, 빌드 도구나 IDE에서 제공하는 디버그 기능을 활용할 수 있다. 예를 들어, GNU Make와 같은 빌드 도구에서는 make VERBOSE=1 명령을 사용하여 빌드 과정에서 실행되는 명령어를 상세히 출력할 수 있다. CMake 자체의 문제를 디버깅할 때는 --trace--trace-expand 옵션을 사용할 수 있다.

이러한 추적 기능은 복잡한 CMake 설정에서 문제가 발생할 때 원인을 파악하는 데 큰 도움이 된다.

변수 검사와 조건문 디버깅

CMake에서는 set() 명령어로 변수를 설정하고, if(), elseif(), else(), endif() 명령어로 조건문을 작성한다. 이 과정에서 발생할 수 있는 문제를 디버깅하기 위해, 변수의 값을 검사하거나 조건문이 어떻게 평가되는지 확인할 필요가 있다.

예를 들어, 특정 조건이 제대로 작동하지 않는 경우, 조건문 앞에 message() 명령어를 삽입하여 조건문의 평가 결과를 출력할 수 있다.

if(${MY_VARIABLE} STREQUAL "expected_value")
    message(STATUS "MY_VARIABLE이 expected_value와 일치한다.")
else()
    message(STATUS "MY_VARIABLE이 expected_value와 일치하지 않는다.")
endif()

이렇게 하면 조건이 제대로 작동하는지 여부를 쉽게 확인할 수 있다.

로그 파일 생성 및 관리

로그 파일 출력

CMake는 표준 출력 외에도 로그 파일을 생성하여 빌드 과정에서 발생한 메시지를 기록할 수 있다. 이를 위해 file() 명령어를 사용하여 로그 파일을 열고, message() 명령어를 사용해 로그 파일에 메시지를 쓸 수 있다.

file(WRITE "${CMAKE_BINARY_DIR}/build.log" "빌드 시작\n")
message(STATUS "빌드가 시작되었다.")
file(APPEND "${CMAKE_BINARY_DIR}/build.log" "빌드가 진행 중...\n")

이렇게 하면 빌드 과정에서 발생한 메시지를 로그 파일에 기록할 수 있으며, 이후에 이를 분석하여 문제를 해결할 수 있다.

디버그 출력 옵션

CMake의 디버그 출력을 보다 상세히 관리하려면, 특정 빌드 옵션을 사용하여 디버그 정보를 출력할 수 있다. 예를 들어, CMake의 캐시 정보를 출력하려면 cmake --debug-output 옵션을 사용할 수 있다. 이 옵션은 CMake의 변수와 설정이 어떻게 캐시에 저장되고 있는지 보여준다.

또한, --warn-uninitialized 옵션을 사용하면 초기화되지 않은 변수에 대한 경고를 출력할 수 있으며, --warn-unused-vars 옵션을 사용하면 사용되지 않은 변수에 대한 경고를 출력할 수 있다. 이러한 옵션은 디버깅 과정에서 유용한 정보를 제공하여 문제를 조기에 발견하는 데 도움이 된다.


관련 자료: