100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > CMake中指定msvc编译时取消【运行时错误检查】和【缓冲区安全检查】的实现方法

CMake中指定msvc编译时取消【运行时错误检查】和【缓冲区安全检查】的实现方法

时间:2022-03-05 13:33:08

相关推荐

CMake中指定msvc编译时取消【运行时错误检查】和【缓冲区安全检查】的实现方法

使用visual studio时能直接在项目属性里配置,但如果使用cmake指定msvc时,这种方案就无法实现了。

1. 取消【运行时错误检查】

cmake指定msvc编译时,默认是开启运行时错误检查的,在CMakeLists.txt中打印CMAKE_CXX_FLAGS_DEBUGCMAKE_CXX_FLAGS_RELEASE就可以看到.

message(${CMAKE_CXX_FLAGS_DEBUG}) # Print Debug Flags Before Changemessage(${CMAKE_CXX_FLAGS_RELEASE}) # Print Release Flags Before Change

里面存在一个/RTCs选项

这时我们只需要将CMAKE_CXX_FLAGS_DEBUGCMAKE_CXX_FLAGS_RELEASE中的/RTC替换成空字符串即可,实现方式如下:

macro(RemoveDebugCXXFlag flag)string(REPLACE "${flag}" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")string(REPLACE "${flag}" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")endmacro()macro(RemoveReleaseCXXFlag flag)string(REPLACE "${flag}" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")string(REPLACE "${flag}" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")endmacro()RemoveDebugCXXFlag("/RTCs")RemoveDebugCXXFlag("/RTC1")RemoveDebugCXXFlag("/RTCc")RemoveDebugCXXFlag("/RTCu")RemoveReleaseCXXFlag("/RTCs")RemoveReleaseCXXFlag("/RTC1")RemoveReleaseCXXFlag("/RTCc")RemoveReleaseCXXFlag("/RTCu")

2. 取消【缓冲区安全检查】

直接设置相应FLAGS属性即可,启动缓冲区安全检查的编译选项是/GS,取消缓冲区安全检查的编译选项是/GS-

set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_DEBUG} ${CMAKE_BUILD_OPTIONS_FLAGS} /GS-" )set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${CMAKE_BUILD_OPTIONS_FLAGS} /GS-" )

MSVC的编译选项说明可参加:传送门

参考链接:

/q/32945670

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。