error: current translation unit is compiled with the target feature '-fsanitize=address' but the AST

使用cmake生成Makefile 编译C++项目时出现报错:

error: current translation unit is compiled with the target feature '-fsanitize=address' but the AST file was not

一般情况下,这个是由于两次编译时的flags不一样导致的。
我这里首次执行cmake时,生成的flags.make中不带-fsanitize=address的参数。项目编译完成后再次执行cmake,这时它在我的flags.make中编译命令全部加上了-fsanitize=address、再次编译项目导致所有的文件都要重新编译,并且还会报出上面的错误。

解决方案是:

  1. 删除之前编译生成的stdafx.h.gch文件重新编译可以解决报错。

如果不想让每次cmake都导致项目需要重新编译。

  • 方法1. 首次执行cmake后直接再次cmake,确保以后再执行cmake生成的flags不会出再发生改变,再编译项目。
  • 方法2. 每次执行cmake时显示指定内存检测的宏,确保生成的flags每次都不会改变。

遗憾的是我一直未能探究出为什么前两次执行相同的cmake生成不同的结果。cmake版本从3.5切换到了3.15都是一样,而且这并不是一个必现的问题,在其他同事的机器上这个问题并没有出现,如果有小伙伴能够发现产生此问题的具体原因。请务必赐教!

原创文章 39 获赞 33 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Three_dog/article/details/100517636