簡體   English   中英

在MinGW編譯器中,-mwindows命令是什么,它有什么作用?

[英]In the MinGW compiler, what is the -mwindows command, and what does it do?

我遇到了一個 C++ 程序的問題,當我運行 .exe 時,程序會運行,我的程序窗口會打開,但控制台會在后台在桌面上打開。 我進行了谷歌搜索,發現使用 -mwindows 命令作為參數進行編譯會刪除控制台。 它做到了。 但我不確定它實際上做了什么,我很好奇。

它的行為與MSDN 上描述的/subsystem:windows開關完全相同。

基本上,它將入口點設置為WinMain (或wWinMain )而不是main (或wmain ),這導致沒有控制台窗口和運行一些 Win32 啟動代碼來創建傳遞給WinMain的參數。 正如 Neil 所說,它不會阻止或啟用您沒有它就無法完成的任何事情。

一個類似的開關是-municode用於在main / WinMainwmain / wWinMain之間切換,微軟工具沒有鏡像。 這些似乎會自動選擇您使用的那個)。

它說您的應用程序是使用不需要控制台窗口的 Win32 API 的應用程序。 當你正在編寫的Windows GUI應用程序,DLL和等,但調試這些類型的應用程序時,控制台窗口可能是有用的,你使用這個選項。 即使使用此選項,您也可以顯式創建控制台窗口,如果您的應用程序需要動態的,相反,您可以從控制台應用程序調用 Win32 GUI API。

在 Code::Blocks 20.03(使用 MinGW-W64 gcc 編譯器項目)中,項目目標( bin/Release )使用 -mwindows 編譯,項目目標( bin/debug )在沒有 -mwindows 的情況下編譯。 調試目標不僅在可執行文件中包含調試信息,而且在后台公開的控制台窗口中運行。 這對於調試“非常”有用,因為您的應用程序可以在您的 gui 應用程序處理時寫入控制台調試消息......就像一個活動的調試日志。 顯然,控制台對於發布目標來說是丑陋的。 在 Code::Blocks 中,開關 -mwindows 在“構建目標”下的項目屬性中間接設置,bin/debug 構建目標指定為控制台應用程序,而 bin/release 目標指定為 gui app。
回到當天(可能是八年前)有一個 catch-22; -mwindows 需要鏈接 Win32 api(但沒有控制台)。 如果你想要一個控制台和 Win32 api,它就不容易工作; 幸運的是,今天這不是問題……您可以混合搭配。 我通常在沒有控制台的情況下構建我的發布目標; 我使用控制台構建調試目標,並使用控制台進行大量調試。 馬庫斯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM