使用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
、再次编译项目导致所有的文件都要重新编译,并且还会报出上面的错误。
解决方案是:
- 删除之前编译生成的
stdafx.h.gch
文件重新编译可以解决报错。
如果不想让每次cmake都导致项目需要重新编译。
- 方法1. 首次执行cmake后直接再次cmake,确保以后再执行cmake生成的flags不会出再发生改变,再编译项目。
- 方法2. 每次执行cmake时显示指定内存检测的宏,确保生成的flags每次都不会改变。
遗憾的是我一直未能探究出为什么前两次执行相同的cmake生成不同的结果。cmake版本从3.5切换到了3.15都是一样,而且这并不是一个必现的问题,在其他同事的机器上这个问题并没有出现,如果有小伙伴能够发现产生此问题的具体原因。请务必赐教!