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

생성기 표현식을 사용하여 크로스 플랫폼 CMake 프로젝트에서 컴파일러 플래그를 설정하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-11-03 01:08:02
원래의
666명이 탐색했습니다.

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

크로스 플랫폼 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}")
로그인 후 복사

원래 접근 방식과 비교하여 이 방법은 다음을 활용합니다.

  • 생성기 표현식을 활용하여 컴파일러 및 구성을 기반으로 컴파일러 옵션을 조건부로 정의합니다.
  • 옵션을 누적하는 string(APPEND ...) 명령 list.
  • 모든 대상에 대한 옵션을 설정하는 add_compile_options() 함수.

수동 플래그 설정 지원 중단

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 생성기 표현식을 사용하세요.
  • 수동 설정보다 add_compile_options()를 선호합니다. CMAKE_CXX_FLAGS.
  • 교차 플랫폼 호환성을 위해 고유한 컴파일러 옵션을 사용하여 여러 대상을 생성합니다.
  • 빌드 래퍼 스크립트를 활용하여 단일 CMake 파일에서 여러 구성을 생성합니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿