컴파일러 옵션 설정의 기본 개념

CMakeLists.txt 파일에서 컴파일러 옵션을 설정하는 것은 CMake를 통해 빌드 프로세스를 관리할 때 중요한 부분이다. 컴파일러 옵션은 코드의 컴파일 과정에서 컴파일러에게 특정한 지시를 내리기 위해 사용된다. CMake를 사용하면 이러한 옵션을 코드에 명시적으로 포함시키거나, 조건에 따라 다르게 적용할 수 있다.

CMake에서 기본 컴파일러 옵션 설정

컴파일러 옵션을 설정하기 위해서는 CMakeLists.txt 파일 내에서 add_compile_options() 또는 target_compile_options() 명령어를 사용한다. add_compile_options()는 전체 프로젝트에 걸쳐서 옵션을 적용하는 데 사용되며, target_compile_options()는 특정 타겟에만 옵션을 적용하는 데 사용된다.

add_compile_options(-Wall -Wextra -Werror)

위의 코드 예시는 모든 소스 파일에 대해 -Wall, -Wextra, -Werror 옵션을 추가하는 방법을 보여준다. 이는 CMakeLists.txt 파일에 작성되며, 모든 빌드 구성에 적용된다.

타겟별 컴파일러 옵션 설정

CMake에서는 특정 타겟에만 컴파일러 옵션을 설정할 수 있다. 이때 target_compile_options() 명령어를 사용한다. 이 명령어는 주어진 타겟에만 옵션을 적용하므로, 프로젝트 내의 다른 타겟에는 영향을 미치지 않는다.

target_compile_options(my_target PRIVATE -O2 -g)

위의 예제에서는 my_target이라는 타겟에 대해 -O2 최적화 옵션과 -g 디버그 정보를 추가하는 옵션을 설정하고 있다. PRIVATE 키워드는 이 옵션들이 타겟 내부에서만 사용됨을 의미한다.

빌드 형식에 따른 옵션 설정

CMake에서는 빌드 형식(예: Debug, Release)에 따라 다른 컴파일러 옵션을 적용할 수 있다. 이를 위해 CMAKE_BUILD_TYPE 변수를 사용하거나, target_compile_options()와 같은 명령어와 조건문을 결합하여 사용할 수 있다.

if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    add_compile_options(-g -O0)
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
    add_compile_options(-O3)
endif()

위의 예제는 빌드 형식이 Debug인 경우에는 디버그 정보를 포함하는 -g와 최적화를 하지 않는 -O0 옵션을 적용하며, Release 빌드의 경우에는 고도 최적화를 위한 -O3 옵션을 적용하는 방법을 보여준다.

조건부 컴파일러 옵션 설정

CMake에서는 특정 조건에 따라 컴파일러 옵션을 선택적으로 적용할 수 있다. 예를 들어, 특정 플랫폼이나 컴파일러 버전에 따라 다른 옵션을 적용할 수 있다.

if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
    add_compile_options(-Wall)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
    add_compile_options(/W4)
endif()

위의 예제에서는 GNU 컴파일러를 사용하는 경우 -Wall 옵션을, MSVC 컴파일러를 사용하는 경우 /W4 옵션을 적용하는 방법을 보여준다.

인터페이스 및 상속 컴파일러 옵션

CMake에서는 INTERFACE, PUBLIC, PRIVATE 접근 지정자를 사용하여 컴파일러 옵션을 설정할 수 있다. 이들은 옵션이 타겟 간에 어떻게 상속되는지를 제어하는 데 사용된다.

target_compile_options(my_target PUBLIC -Wall)

위의 코드에서는 my_target 타겟과 이를 사용하는 모든 타겟에 -Wall 옵션이 적용된다.

특정 파일에 대한 컴파일러 옵션 설정

CMake에서는 특정 소스 파일에 대해서만 옵션을 적용할 수도 있다. 이를 위해 set_source_files_properties() 명령어를 사용할 수 있다.

set_source_files_properties(main.cpp PROPERTIES COMPILE_FLAGS "-O3")

위의 예제에서는 main.cpp 파일에 대해 -O3 최적화 옵션을 적용하는 방법을 보여준다.


관련 자료: - CMake Documentation - CMake Tutorial - CMake Compile Options