CMake에서 컴파일러가 Clang인지 어떻게 테스트합니까?
크로스 플랫폼 CMake 빌드 스크립트 세트가 있으며 Visual C ++ 및 GCC를 사용한 빌드 를 지원 합니다.
Clang을 시도하고 있지만 CMake 스크립트를 사용하여 컴파일러가 Clang인지 여부를 테스트하는 방법을 알 수 없습니다.
컴파일러가 Clang인지 아닌지 테스트하려면 어떻게해야합니까? 현재 Visual C ++ 및 GCC를 각각 테스트 하고 사용 MSVC
하고 CMAKE_COMPILER_IS_GNU<LANG>
있습니다.
신뢰할 수있는 점검은 CMAKE_<LANG>_COMPILER_ID
변수 를 사용하는 것 입니다. 예를 들어 C ++ 컴파일러를 확인하려면 다음을 수행하십시오.
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
# using Clang
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
# using GCC
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
# using Intel C++
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
# using Visual Studio C++
endif()
ccache 와 같은 컴파일러 래퍼 를 사용 하는 경우에도 올바르게 작동합니다 .
CMake 3.0.0부터 CMAKE_<LANG>_COMPILER_ID
Apple 제공 Clang 의 값은 현재 AppleClang
입니다. Apple 제공 Clang과 일반 Clang을 모두 테스트하려면 다음 조건을 사용하십시오.
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# using regular Clang or AppleClang
endif()
AppleClang 정책 설명 도 참조하십시오 .
OGRE 3D 엔진 소스 코드는 다음 검사를 사용합니다 .
if (CMAKE_CXX_COMPILER MATCHES ".*clang")
set(CMAKE_COMPILER_IS_CLANGXX 1)
endif ()
잘못된 맞춤법 문제를 피하기 위해 다음을 사용하고 있습니다.
if (CMAKE_CXX_COMPILER_ID MATCHES "[cC][lL][aA][nN][gG]") #Case insensitive match
set(IS_CLANG_BUILD true)
else ()
set(IS_CLANG_BUILD false)
endif ()
정규식 대소 문자를 구분 하지 않기 위해 여기서 성공하지 않고 모든 것을 시도 했습니다 (CMake에서 지원되지 않는 것 같습니다).
이것은 sakra의 답변에서 수정 된 cmake 초보자를위한 약간 더 자세한 답변입니다. 다음 줄을 추가하십시오 CMakeLists.txt
.
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
MESSAGE("Clang")
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
MESSAGE("GNU")
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
MESSAGE("Intel")
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
MESSAGE("MSVC")
endif()
그런 다음 cmake .
CMakeLists.txt가있는 폴더에서 실행 하십시오. 그러면 답변과 함께 많은 결과가 나타납니다.
...
-- Detecting CXX compile features
-- Detecting CXX compile features - done
GNU
-- Configuring done
-- Generating done
...
참고 URL : https://stackoverflow.com/questions/10046114/in-cmake-how-can-i-test-if-the-compiler-is-clang
'IT박스' 카테고리의 다른 글
MUST와 SHOULD 부울 쿼리의 탄력적 검색 차이 (0) | 2020.07.02 |
---|---|
Git 푸시 인 프로덕션 (FTP) (0) | 2020.07.02 |
EF에서 상위 항목을 업데이트 할 때 하위 항목을 추가 / 업데이트하는 방법 (0) | 2020.07.02 |
부호있는 / 부호없는 char의 차이점 (0) | 2020.07.02 |
멋진 글꼴에 사용자 정의 아이콘 추가 (0) | 2020.07.02 |