CMake其他调试选项

时间:2016-09-13 04:09:39

标签: cmake

使用调试符号编译代码时,我通常还希望启用某些编译时和运行时检查,如下所示:

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

(是的,它是Fortran,但我认为它与其他语言的工作方式相同。)

如果我想用英特尔Fortran编译器编译它,命令将如下所示:

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时想要避免的所有硬编码标志。有没有办法根据它们的作用添加编译器开关,例如“启用所有编译时警告”或“启用所有运行时检查”?

2 个答案:

答案 0 :(得分:4)

CMake警告API:coming soon

讨论提出add_compile_warningstarget_compile_warnings等命令,遵循add_compile_optionstarget_compile_definitions的模型,警告级别如下:

  • all(编译器特定的“all”,例如/ Wall或-Wall);
  • 默认值;
  • 无;
  • 所有内容(编译器的所有可能警告,如果没有这样的选项,请使用最大级别加上明确的警告)。

您可以研究提议的API,也许可以在讨论中暴露您未满足的需求。

答案 1 :(得分:1)

不,CMakes(在当前版本3.6中)不提供这样的编译器开关集。你必须自己定义它们 实际上,所有编译器都提供像Wall这样的开关。你对编译器程序员的选择不满意,CMake程序员怎么能做得更好?