이 문서에서는 교차 플랫폼 CMake에서 컴파일러 플래그를 설정하는 방법에 대한 지침을 제공합니다. 프로젝트. 기존 접근 방식에 대해 제기된 문제를 해결하고 향상된 방법론을 탐구합니다.
이전 접근 방식에서는 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ...")을 사용했습니다. 추가(CMAKE_CXX_FLAGS "...")로 대체됩니다. 또한 "더티 생성기 표현식"을 활용하여 조건을 도입하고 옵션을 간결하게 나열할 수 있습니다.
<code class="cmake">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}")</code>
하위 호환성을 위해 add_compile_options를 사용하는 대체 구문 ()를 사용할 수 있습니다:
<code class="cmake">if(MSVC) add_compile_options("/W4" "$<$<CONFIG:RELEASE>:/O2>") else() add_compile_options("-Wall" "-Wextra" "-Werror" "$<$<CONFIG:RELEASE>:-O3>") if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") add_compile_options("-stdlib=libc++") else() # nothing special for gcc at the moment endif() endif()</code>
C 표준을 수동으로 지정하는 대신 최신 CMake는 필수 기능을 지정합니다.
<code class="cmake">target_compile_features(HelloWorld PUBLIC cxx_lambda_init_captures)</code>
이를 통해 CMake는 기능을 지원하는 데 필요한 컴파일러 플래그를 결정할 수 있습니다.
각 컴파일러 및 구성에 대한 별도의 빌드 디렉터리를 피하기 위해 래퍼 스크립트는 다음을 수행할 수 있습니다. Visual Studio와 같은 IDE 또는 다중 구성 CMake 생성기를 사용하여 여러 구성을 컴파일합니다.
위 내용은 크로스 플랫폼 CMake 프로젝트에서 컴파일러 플래그 설정을 현대화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!