记录一次纠错的经历,因为自己没又仔细看报错信息,以为是我编译出错,在编译上花费了大量的力气。结果只是Visual Studio不支持localtime,认为它不安全才报错。所以下次一定要注意看报错信息啊。
在github上发现一个有意思的项目,可以在控制台输出有颜色的消息,如图所示
然后兴高采烈的的clone,使用,但是vs2019居然给我报了一个错误:
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C4996 'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. testDBG E:\vsproject\testDBG\testDBG\dbg.h 553
我先去github上面看issue,但是搜索localtime没有相关的解决方案,只有一个这个Windows Supported?
里面说用cmake生成,于是我去看readme文件,发现可以
mkdir build
cd build
cmake .. -DCMAKE_CXX_STANDARD=17
make
使用cmake后,出现这个错误
$ cmake .. -DCMAKE_CXX_STANDRD=17
-- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.19043.
CMake Error at CMakeLists.txt:18 (add_subdirectory):
The source directory
E:/git/dbg-macro/tests/Catch2
does not contain a CMakeLists.txt file.
CMake Error at CMakeLists.txt:22 (include):
include could not find requested file:
Catch
CMake Error at CMakeLists.txt:38 (catch_discover_tests):
Unknown CMake command "catch_discover_tests".
-- Configuring incomplete, errors occurred!
See also "E:/git/dbg-macro/build/CMakeFiles/CMakeOutput.log".
那就不加参数吧,还是一样报错。
突然看到readme中
原来是自己没有初始化子模块啊...所以上面才说没有找到catch
又报错,连不上,我记得以前paraview项目的子模块初始化也是,后来我去下的源码好像
网上说把(1)在项目的文件夹下有一个 .gitmodules 文件,打开发现这里面的模块的 URL 是 git@github.com:XXXXXX/XXXXXX.git 这种形式。我们把 git 形式的 url 改为 https 形式。
我试试。但是我这个本来就是https的啊
那是什么原因呢?是因为这个dbg本身的问题吗?还需不需要我编译,因为像nohamon就是只包含头文件就可以用的了
还是再回来看vs的报错吧
试了把localtime预定义为localtime_s和定义_CRT_SECURE_NO_WARNINGS都不行
我还是去报一个issue吧。
解决办法
原来不是构建方式的问题,只是Visual Studio不支持localtime
直接在网上搜localtime的问题,就出来了两种解决方案
-
#pragma warning( disable : 4996 )
-
#ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #endif
这两个随便那个加进去。
运行成功截图:
总结
看来我应该直接在网上搜索报错信息的,这样转了一大圈,还自以为很帅。而且只有自己开发才需要安装子模块。
2021年8月10日 12:46:08更新:
后来我去提了一个PR解决了这个问题,在github官网下载最新的就没事了