最近在使用CMAKE进行跨平台编译测试,在linux上编译没错,但是在windows上使用cmake构建VS项目工程的时候出现错误:

fatal error C1060: compiler is out of heap space

   错误的意思是堆栈内存不足,但是我的工程项目比较小,没有很深的递归程序块。所以不可能会耗尽编译器申请的内存,在cmake中打印编译参数:
MESSAGE(STATUS ${CMAKE_C_FLAGS})
MESSAGE(STATUS ${CMAKE_CXX_FLAGS})
发现参数中有/Zm1000的编译器选项,该选项会使得C编译器去申请大约750M的内存,但是比较新的编译器已经可以自增的申请内存 了,所以该参数的意义不是很大。既然知道了错误原因,那么解决该问题就比较容易 了,只需要删除或者修改该命令行参数就行:

点击(此处)折叠或打开

  1. PROJECT(projectname)#注意,后面的脚本一定要放在PROJECT之后,不然会出错
  2. STRING(REPLACE "/Zm1000" "/Zm100" CMAKE_C_FLAGS ${CMAKE_C_FLAGS})
  3. STRING(REPLACE "/Zm1000" "/Zm100" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
如果VS项目构建成功了,但是在编译的时候依然报堆栈内存不足的错误,那么需要在项目属性中修改编译的命令行参数(Zm),如图:
如何解决cmake 在windows构建VS工程的时候出现fatal error C1060的错误-LMLPHP


/Zm参数应该是cmake的一个BUG,期待在后续的发行版本中解决这个问题

11-08 07:47
查看更多