2016-09-13 3 views
2
디버그 기호와 코드를 컴파일 할 때, 나는 보통 또한 특정 컴파일 시간을 사용하고 싶은

런타임 검사 :CMake 추가 디버그 옵션

gfortran -c -o hello.o -g -O0 -Wall -fcheck-all -fbacktrace hello.f90 

(예, 포트란이야,하지만 난 가정 . 그냥 같은 다른 언어로 작업 것)

내가 인텔 포트란 컴파일러와 같은 컴파일하고 싶었다면,이 명령은 다음과 같을 것이다 :

ifort -c -o hello.o -g -O0 -warn all -check all -traceback hello.f90 

유일한 방법 것은 컴파일 내가 찾은 그 CMake에서이 같은 지금까지이 같은 것입니다 :

IF(${CMAKE_Fortran_COMPILER_ID} MATCHES "GNU") 
    set(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -Wall -fcheck=all -fbacktrace") 
ELSEIF(${CMAKE_Fortran_COMPILER_ID} MATCHES "Intel") 
    set(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -warn all -check all -traceback") 
ELSE() 
    message(WARNING "Unable to determine Compiler ID: ${CMAKE_Fortran_COMPILER_ID}") 
ENDIF(${CMAKE_Fortran_COMPILER_ID} MATCHES "GNU") 

그러나 이것은 내가 CMake를 사용하기 시작하면 피 싶어 모든 하드 플래그를 소개합니다. "모든 컴파일 시간 경고 사용"또는 "모든 런타임 검사 사용"과 같은 컴파일러 스위치를 추가하는 방법이 있습니까?

답변

4

CMake 경고 API : coming soon.

논의는 다음과 같은 경고 수준 add_compile_optionstarget_compile_definitions의 모델 다음 add_compile_warnings 또는 target_compile_warnings 같은 명령, 제안 :

  • 모든 ("모든"특정 컴파일러, 예를 들어,/벽 또는 -Wall)를;
  • ;
  • 없음;
  • 모든 것 (컴파일러에 대한 모든 가능한 경고, 그러한 옵션이없는 경우 최대 레벨과 일부 경고를 명시 적으로 사용함).

제안 된 API를 연구하고 토론에서 만족하지 못한 요구 사항을 드러 낼 수 있습니다.

+1

곧 재판은 조금 낙관적입니다. ruslo는 2016 년 5 월에이 기능을 구현하기를 메일 링리스트에서 발표했습니다. 아직 CMake 마스터에는 나타나지 않았습니다. – usr1234567

1

아니요, CMakes (현재 버전 3.6)는 이러한 컴파일러 스위치 세트를 제공하지 않습니다. 혼자서 정의해야합니다.
실제로 모든 컴파일러는 Wall과 같은 스위치를 제공합니다. 당신은 컴파일러 프로그래머의 선택에 만족하지 않습니다. 어떻게 CMake 프로그래머가 더 잘할 수 있습니까?

+0

나는 모두 ** 스위치와 같은 - 벽을 제공한다는 것을 알고있다 - 나는 단지 그것을 호출하는 더 간단한 방법이 있기를 바랐다. 'GNU'와'Intel'과'Unix'와'Win32' 사이에는'-Wall'의 4 가지 버전이 있습니다. – chw21