有没有一种方法可以从Cmake更改堆栈大小?我只找到了一个提到
CMAKE_CXX_STACK_SIZE
的论坛帖子,但我找不到这个命令的文档。理想情况下,该命令应该适用于Visual Studio C++和gcc。CMAKE_CXX_STACK_SIZE
的论坛帖子,但我找不到这个命令的文档。理想情况下,该命令应该适用于Visual Studio C++和gcc。我目前没有使用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")
/STACK:
替换-Wl,--stack,
(下面会详细说明),并使用if / else为每个编译器使用不同的命令。CMAKE_CXX_STACK_SIZE
,这个线程值得一读,该线程说:
实现VS生成器的历史原因,但并不打算作为设置堆栈大小的一流方法。而是只需使用
target_link_libraries
、LINK_FLAGS
目标属性或CMAKE_EXE_LINKER_FLAGS
中的链接器标志传递/STACK:
即可。
在您的帖子中链接的页面以及这个页面上实际上可以看到这样的命令(不确定您是否看到了它):
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:10000000")
/STACK:“10000000”
。即,用引号括起来的堆栈大小。但是这似乎没问题,因为相应的.vcxproj将以此形式具有该值:<StackReserveSize>10000000</StackReserveSize>
。 - orion elenzilGetCurrentThreadStackLimits()
在运行时测量。 - orion elenzil