使用调试符号编译代码时,我通常还希望启用某些编译时和运行时检查,如下所示:
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时想要避免的所有硬编码标志。有没有办法根据它们的作用添加编译器开关,例如“启用所有编译时警告”或“启用所有运行时检查”?
答案 0 :(得分:4)
CMake警告API:coming soon。
讨论提出add_compile_warnings
或target_compile_warnings
等命令,遵循add_compile_options
和target_compile_definitions
的模型,警告级别如下:
您可以研究提议的API,也许可以在讨论中暴露您未满足的需求。
答案 1 :(得分:1)
不,CMakes(在当前版本3.6中)不提供这样的编译器开关集。你必须自己定义它们
实际上,所有编译器都提供像Wall
这样的开关。你对编译器程序员的选择不满意,CMake程序员怎么能做得更好?