【发布时间】:2018-09-13 14:50:00
【问题描述】:
有没有办法从 Cmake 更改堆栈大小?
我只找到一个forum thread 提到CMAKE_CXX_STACK_SIZE,但我找不到这个命令的文档。理想情况下,该命令应该适用于 Visual Studio C++ 和 gcc。
【问题讨论】:
标签: visual-studio gcc cmake stack stack-size
有没有办法从 Cmake 更改堆栈大小?
我只找到一个forum thread 提到CMAKE_CXX_STACK_SIZE,但我找不到这个命令的文档。理想情况下,该命令应该适用于 Visual Studio C++ 和 gcc。
【问题讨论】:
标签: visual-studio gcc cmake stack stack-size
我目前没有 VS,但以下三个 CMake 命令都适用于 MinGW/GCC(将 <target> 替换为您输入的 add_executable()):
target_link_libraries(<target> PRIVATE "-Wl,--stack,10000000")
或
set_target_properties(<target> PROPERTIES LINK_FLAGS -Wl,--stack,10000000)
或
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--stack,10000000")
请注意,根据CMake documentation,每个都应该只添加链接器标志,而不是替换任何已经设置的标志。
在 VS 中,您似乎应该将 -Wl,--stack, 替换为 /STACK:(更多内容见下文),并使用 if/else 为每个编译器设置不同的命令。
关于CMAKE_CXX_STACK_SIZE,this thread,值得一读,说命令是
由于历史原因,在 VS 生成器的实现中并不打算作为设置堆栈大小的一流方式。相反,只需使用
target_link_libraries或LINK_FLAGS目标属性或在CMAKE_EXE_LINKER_FLAGS... 中将/STACK:... 作为链接器标志传递
这样的命令实际上可以在您帖子中链接的the page 上看到(不确定您是否看到它)以及this one:
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:10000000")
【讨论】:
/STACK:"10000000"。即,堆栈大小用引号引起来。但这似乎很好,因为相应的 .vcxproj 将具有以下形式的值:<StackReserveSize>10000000</StackReserveSize>.
GetCurrentThreadStackLimits() 在运行时测量。