Если вы используете:
add_executable(simple WIN32 simple.c)
тогда вы должны предоставить функцию WinMain. Вот что означает флаг WIN32 для add_executable: это означает, что вы собираетесь сделать из него программу Windows и предоставить функцию WinMain.
Я бы порекомендовал сделать это таким образом, если вы действительно пишете приложение для Windows. Это то, что имеет смысл и наиболее естественно вписывается в базовую ОС.
Однако, если вы все еще хотите передать gcc флаг "-mwindows", но в любом случае использовать "main", просто добавьте "-mwindows" к значению CMAKE_CXX_FLAGS и / или CMAKE_C_FLAGS. Вы можете сделать это в программе cmake-gui, настроив эти переменные в интерактивном режиме, добавив в них «-mwindows», или вы можете сделать это с помощью командной строки CMake, например:
cmake -DCMAKE_C_FLAGS="-mwindows"