2010-05-02 208 views
7

我可以通過GCC實現這一點:如何告訴cmake不要創建控制檯窗口?

gcc -mwindows -o simple simple.c 

但只能找到這cmake的:

add_executable(simple WIN32 simple.c) 

但它不是完全一樣-mwindows

這將需要的入口點是WinMain,

gcc -mwindows不需要這個(可以是main)。

我該如何正確地做到這一點?

+0

這是http://stackoverflow.com/questions/2752792/whats-the-equivalent-of-gccs-mwindows-option-in-cmake的副本。 – MKroehnert 2010-05-16 08:59:48

回答

12

如果你使用:

add_executable(simple WIN32 simple.c) 

,那麼你必須提供一個WinMain函數。這就是WIN32標誌add_executable意味着:這意味着你將使它成爲一個Windows程序,並提供一個WinMain函數。

如果您真的在編寫Windows應用程序,我會建議您這樣做。這是最有意義的,最適合於底層操作系統的。但是,如果您仍然希望傳遞gcc「-mwindows」標誌,但是仍然使用「main」標誌,則只需將「-mwindows」添加到CMAKE_CXX_FLAGS和/或CMAKE_C_FLAGS值即可。您可以通過交互方式調整這些變量包括「-mwindows」中的cmake-GUI程序做到這一點,或者你也可以用命令行的CMake做到這一點,就像這樣:

cmake -DCMAKE_C_FLAGS="-mwindows" 
+0

剛發現這個,它解決了cmake加上一個無控制檯的Windows應用程序非常惱人的問題。特別是在cmake魔術被編織後,移除控制檯的願望很好地融入了這個項目中。謝謝! – Darakian 2017-10-23 15:06:17

1

正如DLRdave曾表示說,可執行文件將是一個win32,意味着它將以WinMain作爲入口點,併成爲一個Windows應用程序。

如果應用程序仍然是跨平臺的,那麼抑制控制檯窗口但仍然允許使用main的通常方法是編寫一個存儲在SDL或SFML庫中的存根WinMain,它只是簡單地調用主函數全局變量__argc和__argv作爲參數並返回其結果。

這可以防止應用程序擁有控制檯窗口,但可以減少不必使用WinMain作爲入口點的代碼中斷。