【问题标题】:CMake additional Debug OptionsCMake 额外的调试选项
【发布时间】:2016-09-13 04:09:39
【问题描述】:

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

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

(是的,它是 Fortran,但我认为它可以与其他语言一样工作。)

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

【问题讨论】:

    标签: cmake


    【解决方案1】:

    CMake 警告 API:coming soon.

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

    • 全部(编译器特定的“全部”,例如 /Wall 或 -Wall);
    • 默认;
    • 无;
    • 一切(编译器的所有可能警告,如果没有此类选项,请使用最高级别以及一些明确的警告)。

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

    【讨论】:

    • 即将推出有点乐观。 ruslo 在邮件列表中宣布,他想在 2016 年 5 月实现这个功能。它还没有出现在 CMake master 中。
    【解决方案2】:

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

    【讨论】:

    • 我知道所有人都提供了一个开关 like -Wall -- 我只是希望有一种更简单的方法来调用它。在GNUIntelUnixWin32 之间有4 个不同版本的-Wall
    猜你喜欢
    • 2016-08-05
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    相关资源
    最近更新 更多