Ich folge dem Tuto:
Es funktioniert, aber jedes Mal, wenn ich auf die ausführbare Datei doppelklicke, gibt es eine Konsole, die ich nicht dort haben will.
Wie werde ich diese Konsole los?
Ich habe es versucht:
%Vor%Aber ich habe diesen fatalen Fehler:
%Vor%Während gcc direkt funktioniert:
%Vor% Ich vermute, es hat etwas mit der Eingangsfunktion zu tun: int main( int argc, char *argv[])
, aber warum gcc funktioniert?
Wie kann ich mit cmake
arbeiten?
AKTUALISIEREN
Lassen Sie mich hier den Quellcode einfügen:
%Vor%UPDATE2
Warum gcc -mwindows
funktioniert, aber add_executable(Cmd WIN32 cmd.c)
nicht?
Vielleicht ist das nicht gleichbedeutend mit -mwindows
in cmake?
add_executable (Cmd WIN32 cmd.c)
Sagt CMake Dies ist ein Windows-Programm, und es sucht nach WinMain statt Main. Wenn Sie die verwendeten Flags sehen möchten, können Sie make VERBOSE = 1 ausführen. Die Frage könnte sein, wie definieren Sie WinMain für GTK-Anwendungen? Ich weiß mit Qt, dass Sie in einer Bibliothek verlinken, die es für Sie definiert.
Wenn Sie möchten, dass Ihr Programm im Konsolenmodus ausgeführt wird (z. B. eine main
-Funktion), müssen Sie es in den Projekteigenschaften in MSVC angeben. Was Sie gerade verwenden, ist ein Projekt im Fenstermodus (dh eine WinMain
-Funktion, die Sie nicht haben, daher der Fehler).
Aber wenn Sie das hässliche Konsolenfenster nicht sehen wollen, wollen Sie den gefensterten Modus verwenden (zB transformieren Sie Ihre main
-Funktion in eine propper WinMain
-Funktion). Auf diese Weise wird nur das normale Fenster angezeigt.
edit: Nebenbei sollten Sie Ihr Programm "cmd", das ist der Name des Windows-Befehlsinterpreters, wirklich nicht nennen.
Sie können diese Linker-Flags so einstellen, dass sie einen main()
-Eintrittspunkt und keine Konsole haben:
Weitere Informationen finden Sie unter diese Antwort für die Linker-Flags und diese Antwort zum Festlegen von Flags in cmake
.
Laut der CMake-Dokumentation zur Verwendung des WIN32-Flags mit ADD_EXECUTABLE :
Wenn diese Eigenschaft auf "true" gesetzt ist, wird die ausführbare Datei, wenn sie unter Windows verknüpft ist, mit einem WinMain () - Einstiegspunkt anstelle von nur main () erstellt. Dies macht sie zu einer ausführbaren GUI anstelle einer Konsolenanwendung. Informationen zum Konfigurieren der Verwendung von MFC für ausführbare Dateien von WinMain finden Sie in der CMAKE_MFC_FLAG-Variablendokumentation.
Der Einstiegspunkt Ihres Programms ist jedoch main()
und nicht WinMain()
. Was Sie stattdessen tun sollten, ist das WIN32-Flag weglassen, aber Sie müssen mit libgtk verknüpfen. Also würden Sie TARGET_LINK_LIBRARIES verwenden: