크로스 플랫폼 CMake 프로젝트에서 컴파일러 플래그를 설정하는 현대적인 방법
CMake 생성기 표현식을 사용한 우아한 솔루션
귀하의 접근 방식은 유효하지만 최신 CMake는 더 많은 기능을 제공합니다. CMake의 생성기 표현식을 사용하는 간결하고 강력한 솔루션:
cmake_minimum_required(VERSION 3.8) project(HelloWorld) string( APPEND _opts "$<IF:$<CXX_COMPILER_ID:MSVC>," "/W4;$<$<CONFIG:RELEASE>:/O2>," "-Wall;-Wextra;-Werror;" "$<$<CONFIG:RELEASE>:-O3>" "$<$<CXX_COMPILER_ID:Clang>:-stdlib=libc++>" ">" ) add_compile_options("${_opts}")
원래 접근 방식과 비교하여 이 방법은 다음을 활용합니다.
수동 플래그 설정 지원 중단
As you' CMAKE_CXX_FLAGS 및 유사한 변수를 수동으로 설정하는 것은 일반적으로 권장되지 않습니다. 대신 add_compile_options() 함수를 사용하여 전역 플래그를 수정하지 않고 옵션을 추가하는 것이 좋습니다.
다중 대상 프로젝트 설정
다양한 옵션을 사용하여 여러 대상을 생성하려면 동일한 디렉터리에 있으면 CMake의 대상 속성을 사용할 수 있습니다.
add_executable(HelloWorld_Debug_Clang HelloWorld.cpp) target_compile_options(HelloWorld_Debug_Clang PRIVATE "-std=c++1z;-W4") target_link_libraries(HelloWorld_Debug_Clang PRIVATE libc++) add_executable(HelloWorld_Release_Gcc HelloWorld.cpp) target_compile_options(HelloWorld_Release_Gcc PRIVATE "-std=c++1z;-W3") target_link_libraries(HelloWorld_Release_Gcc PRIVATE libstdc++)
이 접근 방식을 사용하면 다른 컴파일러를 지정할 수 있습니다. 단일 프로젝트 파일을 유지하면서 각 대상에 대한 옵션을 제공합니다.
최신 모범 사례
위 내용은 생성기 표현식을 사용하여 크로스 플랫폼 CMake 프로젝트에서 컴파일러 플래그를 설정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!