什么相当于cmake中gcc的-mwindows选项?

Gtk*_*ker 8 c windows gtk cmake

我跟着tuto:

http://zetcode.com/tutorials/gtktutorial/firstprograms/

它工作,但每次我双击可执行文件,有一个控制台,我不希望它在那里.

我如何摆脱那个控制台?

我试过这个:

add_executable(Cmd WIN32 cmd.c)
Run Code Online (Sandbox Code Playgroud)

但得到了这个致命的错误:

MSVCRTD.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
Cmd.exe : fatal error LNK1120: 1 unresolved externals
Run Code Online (Sandbox Code Playgroud)

使用gcc直接工作:

gcc -o Cmd cmd.c -mwindows ..
Run Code Online (Sandbox Code Playgroud)

我猜这与入门函数有关:int main( int argc, char *argv[])但为什么gcc有效?

我怎样才能使用它cmake

UPDATE

为方便起见,我这里粘贴源代码:

#include <gtk/gtk.h>

int main( int argc, char *argv[])
{
  GtkWidget *window;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_widget_show(window);

  gtk_main();

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

UPDATE2

为什么gcc -mwindows有效但add_executable(Cmd WIN32 cmd.c)不是?

也许这不是-mwindowscmake 的等价物?

小智 5

add_executable(Cmd WIN32 cmd.c)

告诉CMake这是一个Windows程序,它寻找WinMain而不是main.如果要查看正在使用的标志,可以运行make VERBOSE = 1.问题可能是你如何为gtk应用程序定义WinMain?我知道Qt,你链接在一个为你定义它的库中.

  • 我想通过“cmake”来实现我的目标,而不是将“main”更改为“WinMain”,就像“gcc -mwindows”那样。 (2认同)
  • cmake .. -DCMAKE_CXX_FLAGS="-mwindows" 对于 C++ (2认同)

Bli*_*ndy 2

如果您希望程序以控制台模式(即函数)运行main,则必须在 MSVC 中的项目属性中指定它。您现在使用的是窗口模式下的项目(即WinMain您没有的函数,因此会出现错误)。

但是,如果您不想获得丑陋的控制台窗口,则需要使用窗口模式(即将您的main函数转换为适当的WinMain函数)。这样,您的普通窗口就将显示出来。

编辑:顺便说一句,你真的不应该将程序命名为“cmd”,这是 Windows 命令解释器的名称。