我可以通過GCC實現這一點:如何告訴cmake不要創建控制檯窗口?
gcc -mwindows -o simple simple.c
但只能找到這cmake的:
add_executable(simple WIN32 simple.c)
但它不是完全一樣-mwindows
,
這將需要的入口點是WinMain
,
而gcc -mwindows
不需要這個(可以是main
)。
我該如何正確地做到這一點?
我可以通過GCC實現這一點:如何告訴cmake不要創建控制檯窗口?
gcc -mwindows -o simple simple.c
但只能找到這cmake的:
add_executable(simple WIN32 simple.c)
但它不是完全一樣-mwindows
,
這將需要的入口點是WinMain
,
而gcc -mwindows
不需要這個(可以是main
)。
我該如何正確地做到這一點?
如果你使用:
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"
剛發現這個,它解決了cmake加上一個無控制檯的Windows應用程序非常惱人的問題。特別是在cmake魔術被編織後,移除控制檯的願望很好地融入了這個項目中。謝謝! – Darakian 2017-10-23 15:06:17
正如DLRdave曾表示說,可執行文件將是一個win32,意味着它將以WinMain作爲入口點,併成爲一個Windows應用程序。
如果應用程序仍然是跨平臺的,那麼抑制控制檯窗口但仍然允許使用main的通常方法是編寫一個存儲在SDL或SFML庫中的存根WinMain,它只是簡單地調用主函數全局變量__argc和__argv作爲參數並返回其結果。
這可以防止應用程序擁有控制檯窗口,但可以減少不必使用WinMain作爲入口點的代碼中斷。
這是http://stackoverflow.com/questions/2752792/whats-the-equivalent-of-gccs-mwindows-option-in-cmake的副本。 – MKroehnert 2010-05-16 08:59:48