/F MSVC stack size not working with CMake

This program stack overflows by default on windows, because it allocates more than 1MB on the stack on debug builds. So I pass /F to MSVC and it works. However, when I do it in CMake, it does not seem to work and keep getting stack overflow.

//main.cpp
// compile with cl.exe /F52428800 main.cpp && main.exe
#include <stdio.h>
struct foo
{
    float Foo[1024 * 100];
};

foo ReadFoo()
{
    foo Foo = {};
    return (Foo);
}

int main(void)
{
    foo Foo = ReadFoo();
    printf("hello world\n");
    return (0);
}

and then cmake

cmake_minimum_required(VERSION 3.17 FATAL_ERROR)
project(MyProj VERSION 0.1.0 LANGUAGES CXX C)
add_executable(Main main.cpp)
target_compile_options(Main PRIVATE  /F52428800)
# target_link_options(Main PRIVATE /STACK:52428800)

running the CMake version, with /F still gets stack overflow, it does work with /STACK linker flag, but I think it should work on both?

Here is the verbose output, in which I can see clearly it does pass /F correctly.
It might be that it passes other flags that corrupts it? I am not sure.
(cmake version 4.2.1 cl.exe 19.50.35728 for x64)

cmake --build build -v
Change Dir: 'C:/Users/alika/Work/Personal Projects/cmake_bug/build'

Run Build Command(s): "C:/Program Files/Microsoft Visual Studio/18/Community/MSBuild/Current/Bin/amd64/MSBuild.exe" ALL_BUILD.vcxproj /p:Configuration=Debug /p:Platform=x64 /p:VisualStudioVersion=18.0 /v:n
MSBuild version 18.4.0+6e61e96ac for .NET Framework
Build started 5/5/2026 8:27:19 PM.

Project "C:\Users\alika\Work\Personal Projects\cmake_bug\build\ALL_BUILD.vcxproj" on node 1 (default targets).
Project "C:\Users\alika\Work\Personal Projects\cmake_bug\build\ALL_BUILD.vcxproj" (1) is building "C:\Users\alika\Work\
Personal Projects\cmake_bug\build\ZERO_CHECK.vcxproj" (2) on node 1 (default targets).
PrepareForBuild:
  Creating directory "x64\Debug\ZERO_CHECK\".
  Structured output is enabled. The formatting of compiler diagnostics will reflect the error hierarchy. See https://ak
  a.ms/cpp/structured-output for more details.
  Creating directory "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\".
InitializeBuildStatus:
  Creating "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
  Touching "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild".
CustomBuild:
  1>Checking Build System
FinalizeBuildStatus:
  Deleting file "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild".
  Touching "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\ZERO_CHECK.lastbuildstate".
Done Building Project "C:\Users\alika\Work\Personal Projects\cmake_bug\build\ZERO_CHECK.vcxproj" (default targets).

Project "C:\Users\alika\Work\Personal Projects\cmake_bug\build\ALL_BUILD.vcxproj" (1) is building "C:\Users\alika\Work\
Personal Projects\cmake_bug\build\Main.vcxproj" (3) on node 1 (default targets).
PrepareForBuild:
  Structured output is enabled. The formatting of compiler diagnostics will reflect the error hierarchy. See https://ak
  a.ms/cpp/structured-output for more details.
  Creating directory "C:\Users\alika\Work\Personal Projects\cmake_bug\build\Debug\".
  Creating directory "Main.dir\Debug\Main.tlog\".
InitializeBuildStatus:
  Creating "Main.dir\Debug\Main.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
  Touching "Main.dir\Debug\Main.tlog\unsuccessfulbuild".
CustomBuild:
  Building Custom Rule C:/Users/alika/Work/Personal Projects/cmake_bug/CMakeLists.txt
ClCompile:
  C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.50.35717\bin\HostX64\x64\CL.exe /c /Zi /nologo
   /W1 /WX- /diagnostics:column /Od /Ob0 /D _MBCS /D WIN32 /D _WINDOWS /D "CMAKE_INTDIR=\"Debug\"" /EHsc /RTC1 /MDd /GR
   /Fo"Main.dir\Debug\\" /Fd"Main.dir\Debug\vc145.pdb" /external:W1 /TP /errorReport:queue  /F52428800 "C:\Users\alika\
  Work\Personal Projects\cmake_bug\main.cpp"
  main.cpp
Link:
  C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.50.35717\bin\HostX64\x64\link.exe /OUT:"C:\Use
  rs\alika\Work\Personal Projects\cmake_bug\build\Debug\Main.exe" /INCREMENTAL /ILK:"Main.dir\Debug\Main.ilk" /NOLOGO k
  ernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /
  MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /DEBUG /PDB:"C:/Users/alika/Work/Personal
  Projects/cmake_bug/build/Debug/Main.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /IMPLIB:"C:/Users/alika/Work/Personal Projects/c
  make_bug/build/Debug/Main.lib" /MACHINE:X64  /machine:x64 Main.dir\Debug\main.obj
  Main.vcxproj -> C:\Users\alika\Work\Personal Projects\cmake_bug\build\Debug\Main.exe
FinalizeBuildStatus:
  Deleting file "Main.dir\Debug\Main.tlog\unsuccessfulbuild".
  Touching "Main.dir\Debug\Main.tlog\Main.lastbuildstate".
Done Building Project "C:\Users\alika\Work\Personal Projects\cmake_bug\build\Main.vcxproj" (default targets).

PrepareForBuild:
  Creating directory "x64\Debug\ALL_BUILD\".
  Structured output is enabled. The formatting of compiler diagnostics will reflect the error hierarchy. See https://ak
  a.ms/cpp/structured-output for more details.
  Creating directory "x64\Debug\ALL_BUILD\ALL_BUILD.tlog\".
InitializeBuildStatus:
  Creating "x64\Debug\ALL_BUILD\ALL_BUILD.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
  Touching "x64\Debug\ALL_BUILD\ALL_BUILD.tlog\unsuccessfulbuild".
CustomBuild:
  Building Custom Rule C:/Users/alika/Work/Personal Projects/cmake_bug/CMakeLists.txt
FinalizeBuildStatus:
  Deleting file "x64\Debug\ALL_BUILD\ALL_BUILD.tlog\unsuccessfulbuild".
  Touching "x64\Debug\ALL_BUILD\ALL_BUILD.tlog\ALL_BUILD.lastbuildstate".
Done Building Project "C:\Users\alika\Work\Personal Projects\cmake_bug\build\ALL_BUILD.vcxproj" (default targets).


Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:00.99