> 백엔드 개발 > C++ > 본문

다중 대상 CMake 프로젝트에서 컴파일러 플래그를 효율적으로 구성하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-01 19:43:30
원래의
520명이 탐색했습니다.

How to Efficiently Configure Compiler Flags in Multi-Target CMake Projects?

교차 플랫폼 CMake 프로젝트의 효율적인 컴파일러 플래그 구성

다양한 컴파일러 및 구성에 대한 컴파일러 옵션 설정

컴파일러 옵션 설정에 대한 우려 사항을 해결하려면 다양한 컴파일러 및 구성에 대해 업데이트되고 향상된 접근 방식은 다음과 같습니다.

<code class="cmake">cmake_minimum_required(VERSION 3.15)

project(HelloWorld)

string(
    APPEND CXX_FLAGS
    "$<IF:$<CXX_COMPILER_ID:MSVC>,"
        "/W4;$<$<CONFIG:RELEASE>:/O2>,"
        "-Wall;-Wextra;-Werror;"
            "$<$<CONFIG:RELEASE>:-O3>"
            "$<$<CXX_COMPILER_ID:Clang>:-stdlib=libc++>"
    ">"
)

add_compile_options("${CXX_FLAGS}")

add_executable(HelloWorld "main.cpp")

target_compile_features(HelloWorld PUBLIC cxx_lambda_init_captures)</code>
로그인 후 복사

개선 사항:

  • CMake 3.8에 도입된 CMake 생성기 표현식 구문을 사용합니다. 이는 더 간단하고 간결합니다.
  • 명확하고 읽기 쉬운 방식으로 컴파일러 옵션을 지정할 수 있는 add_compile_options() 함수를 활용합니다.
  • CMAKE_CXX_FLAGS 및 CMAKE_CXX_FLAGS를 수동으로 설정할 필요가 없습니다. 유사한 변수.
  • C 표준을 명시적으로 설정하는 대신 target_compile_features()를 사용하여 C 기능을 지정합니다.

Multi-Target CMake 프로젝트

각 컴파일러와 구성에 자체 대상이 있는 다중 대상 프로젝트의 경우 다음 접근 방식을 사용할 수 있습니다.

<code class="cmake">cmake_minimum_required(VERSION 3.15)

project(HelloWorld)

set(COMPILERS MSVC Clang GNU)
set(CONFIGURATIONS Debug Release)

foreach(_compiler IN LISTS COMPILERS)
    foreach(_config IN LISTS CONFIGURATIONS)
        add_executable(HelloWorld_${_compiler}_${_config} "main.cpp")

        # Set compiler flags for this target
        target_compile_options(HelloWorld_${_compiler}_${_config} PUBLIC
            "$<IF:$<CXX_COMPILER_ID:${_compiler}>,"
                "/W4;$<$<CONFIG:${_config}>:/O2>,"
                "-Wall;-Wextra;-Werror;"
                    "$<$<CONFIG:${_config}>:-O3>"
                    "$<$<CXX_COMPILER_ID:Clang>:-stdlib=libc++>"
            ">"
        )

        # Set C++ feature requirements for this target
        target_compile_features(HelloWorld_${_compiler}_${_config} PUBLIC cxx_lambda_init_captures)
    endforeach()
endforeach()</code>
로그인 후 복사

개선 사항:

  • 여러 대상 생성 컴파일러 및 구성 조합을 기반으로 하는 고유한 이름을 사용합니다.
  • 각 대상에 대해 컴파일러 플래그와 C 기능을 개별적으로 구성합니다.

모범 사례 및 추가 자료

다음은 다음과 같습니다. 도움이 될 수 있는 추가 리소스:

  • [CMake 튜토리얼: 다중 대상](https://www.cmake.org/cmake-docs/latest/manual/cmake-tutorial/MultipleTargets.html )
  • [CMake 패키징 및 배포 가이드](https://cmake.org/cmake-docs/latest/manual/cmake-packaging.html#packaging-multiple-projects-in-a-single-project )

위 내용은 다중 대상 CMake 프로젝트에서 컴파일러 플래그를 효율적으로 구성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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