CMake Release模式下如何禁用Fortran的-DNDEBUG选项以解决编译错误?
解决CMake Release模式下Intel Fortran的NDEBUG冲突问题
CMake的Release构建类型默认会给Intel Fortran编译器添加-DNDEBUG预定义宏,这会和你代码里定义的NDEBUG参数常量冲突——预编译阶段会把INTEGER(LONG), PARAMETER :: NDEBUG = 250替换成INTEGER(LONG), PARAMETER :: 1 = 250,直接触发#5082语法错误。以下是几种解决方法:
全局移除Release模式的NDEBUG定义
在CMakeLists.txt中添加这段代码,直接从Release模式的Fortran编译选项里删掉-DNDEBUG:if(CMAKE_BUILD_TYPE STREQUAL "Release") string(REPLACE "-DNDEBUG" "" CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE}") endif()仅针对特定编译目标禁用
如果你不想全局修改,只需要给特定的库或可执行文件取消该宏定义,可以用:# 取消NDEBUG的预定义 target_compile_options(你的目标名称 PRIVATE $<$<CONFIG:Release>:-UNDEBUG>)或者用定义空值的方式避免替换:
target_compile_definitions(你的目标名称 PRIVATE $<$<CONFIG:Release>:NDEBUG=>)最直接的备选方案:重命名常量
要是修改CMake配置嫌麻烦,直接把代码里的NDEBUG换成别的名字就行,比如:INTEGER(LONG), PARAMETER :: MY_NDEBUG = 250
内容的提问来源于stack exchange,提问作者realbabilu
相关产品推荐
相关产品推荐

