>  기사  >  백엔드 개발  >  크로스 플랫폼 CMake 프로젝트에서 컴파일러 플래그를 설정하는 방법은 무엇입니까?

크로스 플랫폼 CMake 프로젝트에서 컴파일러 플래그를 설정하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-03 12:07:03760검색

How to Set Compiler Flags in Cross-Platform CMake Projects?

크로스 플랫폼 CMake 프로젝트에서 컴파일러 플래그를 설정하는 현대적인 방법

CMake 생성기 및 표현식 사용

CMake는 현대적이고 유연한 방식으로 컴파일러 플래그를 설정하기 위한 여러 가지 방법을 제공합니다. 한 가지 접근 방식은 다음과 같은 CMake 생성기 및 표현식을 사용하는 것입니다.

<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() 사용

또 다른 방법은 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>

모범 사례

크로스 플랫폼 CMake 프로젝트를 설정할 때 다음을 수행하는 것이 좋습니다. 다음 지침을 따르세요.

  • CMake 생성기 및 표현식을 사용하거나 add_compile_options()를 사용하여 컴파일러 플래그를 설정하세요.
  • CMAKE_CXX_FLAGS 및 유사한 변수를 수동으로 수정하지 마세요.
  • target_compile_features를 사용하세요. ()를 사용하면 코드가 의존하는 C 기능을 지정할 수 있습니다. C 표준을 명시적으로 설정하는 것보다 더 나은 오류 처리 기능을 제공하기 때문입니다.
  • 단일 CMake 구성으로 여러 구성을 구축하려면 래퍼 스크립트나 다중 구성 IDE를 사용하는 것이 좋습니다.

다중 대상 빌드

동일한 디렉터리에 여러 대상을 빌드하려면 다음과 같이 각 컴파일러 및 구성 조합에 대해 별도의 빌드 구성을 만듭니다.

  • x86-Debug-Clang
  • x86-Release-Clang
  • x86-Debug-MSVC
  • x86-Release-MSVC

그런 다음 make 대상을 사용하여 각 구성을 빌드할 수 있습니다.

  • make x86-Debug-Clang
  • make x86-Release-Clang
  • make x86-Debug-MSVC
  • x86-Release-MSVC 만들기

위 내용은 크로스 플랫폼 CMake 프로젝트에서 컴파일러 플래그를 설정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.