Cmake如何修改堆栈大小

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

9

我目前没有使用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文档,这些都应该只添加链接器标志,而不是替换任何已经设置的标志。
在VS中,看起来您应该使用/STACK:替换-Wl,--stack,(下面会详细说明),并使用if / else为每个编译器使用不同的命令。
关于CMAKE_CXX_STACK_SIZE这个线程值得一读,该线程说:

实现VS生成器的历史原因,但并不打算作为设置堆栈大小的一流方法。而是只需使用target_link_librariesLINK_FLAGS目标属性或CMAKE_EXE_LINKER_FLAGS中的链接器标志传递/STACK:即可。

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

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:10000000")

2
小注:在任何情况下,如果与Visual Studio 2019一起使用,则实际的链接器命令行将为/STACK:“10000000”。即,用引号括起来的堆栈大小。但是这似乎没问题,因为相应的.vcxproj将以此形式具有该值:<StackReserveSize>10000000</StackReserveSize> - orion elenzil
1
另外,看起来VS强制执行最小0x40000字节,由GetCurrentThreadStackLimits()在运行时测量。 - orion elenzil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接