CMake에서 경고 수준을 설정하는 방법은 무엇입니까?
CMake를 사용하여 프로젝트 (전체 솔루션이 아님)에 대한 경고 수준 을 설정하는 방법은 무엇입니까? Visual Studio 및 GCC 에서 작동해야합니다 .
다양한 옵션을 찾았지만 대부분 작동하지 않거나 문서와 일치하지 않는 것 같습니다.
업데이트 :이 답변은 Modern CMake 시대 이전입니다. 모든 정상적인 CMake 사용자는 CMAKE_CXX_FLAGS
직접 조작 하지 target_compile_options
말고 대신 명령을 호출해야 합니다. 권장 모범 사례를 제시 하는 mrts의 답변 을 확인하십시오 .
다음과 유사한 작업을 수행 할 수 있습니다.
if(MSVC)
# Force to always compile with W4
if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
endif()
elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
# Update if necessary
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic")
endif()
최신 CMake에서는 다음이 잘 작동합니다.
if(MSVC)
target_compile_options(${TARGET_NAME} PRIVATE /W4 /WX)
else()
target_compile_options(${TARGET_NAME} PRIVATE -Wall -Wextra -pedantic -Werror)
endif()
${TARGET_NAME}
실제 대상 이름으로 바꿉니다 . -Werror
선택 사항이며 모든 경고를 오류로 바꿉니다.
또는 add_compile_options(...)
주석에서 @aldo가 제안한대로 모든 대상에 적용하려면 사용하십시오.
내가 작성한 일부 CMake 모듈 에는 실험적인 교차 플랫폼 경고 억제 기능이 포함되어 있습니다 .
sugar_generate_warning_flags(
target_compile_options
target_properties
ENABLE conversion
TREAT_AS_ERRORS ALL
)
set_target_properties(
foo
PROPERTIES
${target_properties}
COMPILE_OPTIONS
"${target_compile_options}"
)
Xcode의 결과 :
- 설정
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION
엑스 코드 속성 (일명 빌드 설정 -> 경고 -> 의심스러운 암시 적 변환 -> YES ) - 컴파일러 플래그 추가 :
-Werror
Makefile gcc 및 clang :
- 컴파일러 플래그 추가 :
-Wconversion
,-Werror
비주얼 스튜디오:
- 컴파일러 플래그 추가 :
/WX
,/w14244
연결
지금까지 찾은 최고의 솔루션은 다음과 같습니다 (컴파일러 검사 포함).
if(CMAKE_BUILD_TOOL MATCHES "(msdev|devenv|nmake)")
add_definitions(/W2)
endif()
그러면 Visual Studio에서 경고 수준 2가 설정됩니다. 나는 -W2
그것이 GCC에서도 작동 한다고 생각 합니다 (예상되지 않음).
Update from @Williams: It should be -Wall
for GCC.
참고URL : https://stackoverflow.com/questions/2368811/how-to-set-warning-level-in-cmake
'Programming' 카테고리의 다른 글
SQL SELECT 속도 int 대 varchar (0) | 2020.08.23 |
---|---|
Visual Studio 2017에는 템플릿이 없습니다. (0) | 2020.08.23 |
PrimeFaces p : fileUpload를 사용하는 방법? (0) | 2020.08.22 |
@ Html.ActionLink MVC 4에서 컨트롤러로 매개 변수 전달 (0) | 2020.08.22 |
문자열에서 마지막 세 문자 제거 (0) | 2020.08.22 |