컴파일러 옵션 설정의 기본 개념
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
접근 지정자를 사용하여 컴파일러 옵션을 설정할 수 있다. 이들은 옵션이 타겟 간에 어떻게 상속되는지를 제어하는 데 사용된다.
PRIVATE
: 옵션이 설정된 타겟에서만 사용된다.PUBLIC
: 옵션이 설정된 타겟과 이 타겟을 사용하는 모든 타겟에 상속된다.INTERFACE
: 옵션이 설정된 타겟에는 적용되지 않지만, 이 타겟을 사용하는 타겟에 상속된다.
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