【问题标题】:Cmake change stack sizeCmake 更改堆栈大小
【发布时间】:2018-09-13 14:50:00
【问题描述】:

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

【问题讨论】:

    标签: visual-studio gcc cmake stack stack-size


    【解决方案1】:

    我目前没有 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")
    

    【讨论】:

    • 次要注意:当与 Visual Studio 2019 一起使用时,实际的链接器命令行将具有 /STACK:"10000000"。即,堆栈大小用引号引起来。但这似乎很好,因为相应的 .vcxproj 将具有以下形式的值:&lt;StackReserveSize&gt;10000000&lt;/StackReserveSize&gt;.
    • 另外,看起来 VS 强制要求至少 0x40000 字节,由 GetCurrentThreadStackLimits() 在运行时测量。
    猜你喜欢
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多