Cmake改变堆栈大小

tom*_*myk 9 stack gcc cmake stack-size visual-studio

有没有办法从Cmake更改堆栈大小?
我只找到一个论坛帖子提到CMAKE_CXX_STACK_SIZE,但找不到该命令的文档。理想情况下,该命令应适用于Visual Studio C++gcc

Gum*_*een 10

我目前没有 VS,但以下三个 CMake 命令在 MinGW/GCC 上都适用于我(替换<target>为您输入的内容add_executable()):

target_link_libraries(<target> PRIVATE "-Wl,--stack,10000000")
Run Code Online (Sandbox Code Playgroud)

或者

set_target_properties(<target> PROPERTIES LINK_FLAGS -Wl,--stack,10000000)
Run Code Online (Sandbox Code Playgroud)

或者

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--stack,10000000")
Run Code Online (Sandbox Code Playgroud)

请注意,根据CMake 文档,其中每个都应该只添加链接器标志,而不是替换任何已设置的链接器标志。

在 VS 中,看起来您应该替换-Wl,--stack,/STACK:(更多内容见下文)并使用 if/else 为每个编译器提供不同的命令。

关于CMAKE_CXX_STACK_SIZE这个值得一读的线程说命令是

由于历史原因,它出现在 VS 生成器的实现中,但并不打算作为设置堆栈大小的一流方法。相反,只需使用、 或目标属性或 in .../STACK:作为链接器标志传递...target_link_librariesLINK_FLAGSCMAKE_EXE_LINKER_FLAGS

这样的命令实际上可以在您的帖子中链接的页面上看到(不确定您是否看到它)以及在这个页面上:

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:10000000")
Run Code Online (Sandbox Code Playgroud)

  • 小注意事项:无论如何,与 Visual Studio 2019 一起使用时,实际的链接器命令行将具有 `/STACK:"10000000"`。即,堆栈大小用引号引起来。但这似乎没问题,因为相应的 .vcxproj 将具有以下形式的值:`&lt;StackReserveSize&gt;10000000&lt;/StackReserveSize&gt;`。 (2认同)