[英]How do I keep my Qt C++ program from opening a console in Windows?
我在Qt Creator中創建了一個應用程序,cmake和MinGW作為編譯器。 我已經看到這個問題正在為其他人解答,但他們使用.pro文件的常規Qt項目,而我使用CMakeLists.txt文件。 所以這些帖子對我沒用。
問題是我的應用程序在啟動時會打開一個控制台,像往常一樣,關閉此控制台也會關閉應用程序。 我想讓應用程序不要打開控制台,這樣對於那些不需要任何調試信息等的用戶來說,它更加用戶友好。
您很可能在CMakeLists.txt中有如下所示的行:
ADD_EXECUTABLE(exename ....)
當然,點是進一步的論點。 將其更改為:
ADD_EXECUTABLE(exename [WIN32] ...)
指定它是Win32應用程序而不是控制台應用程序。
或者,可以在CMAKE網站上找到“如果給出WIN32
則將在創建的目標上設置屬性WIN32_EXECUTABLE
”。 當設置WIN32_EXECUTABLE時,它將“ 在Windows上使用WinMain入口點構建可執行文件 ”。
默認情況下,與qmake相反,cmake在Windows下使用啟用的控制台窗口構建Qt應用程序(Windows二進制文件可以使用不同的入口點 - 控制台窗口就是其中之一)。
您可以通過在可執行文件上設置WIN32_EXECUTABLE
cmake屬性來禁用出現的控制台窗口。
這可以通過設置add_executable
選項來實現,即
add_executable(myexe WIN32 ...)
或通過明確設置屬性:
set_property(TARGET main PROPERTY WIN32_EXECUTABLE true)
當有條件地禁用控制台窗口時,使用set_property()
很有用,例如:
if(CMAKE_BUILD_TYPE STREQUAL "Release")
set_property(TARGET main PROPERTY WIN32_EXECUTABLE true)
endif()
在WIN32_EXECUTABLE
以外的平台上進行編譯時, WIN32_EXECUTABLE
屬性不起作用(參見CMAKE_WIN32_EXECUTABLE
)。
與WIN32
cmake變量一樣, WIN32_EXECUTABLE
屬性還在編譯win64可執行文件時配置控制台窗口。
我有同樣的問題,但通過添加:
#CMakeLists.txt
# ... some text (like finding QT)
LINK_LIBRARIES(${QT_QTMAIN_LIBRARY})
# ... and then
ADD_EXECUTABLE(my_qt_project WIN32 ... )
如果我不使用LINK_LIBRARIES(${QT_QTMAIN_LIBRARY})
我會收到錯誤:
error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
這是一個老問題,但無論如何,有一個比這里發布的所有其他更好的解決方案:
CMAKE_POLICY(SET CMP0020 NEW)
添加它會自動為您處理所有事情。 如果你沒有設定這個政策,CMake實際上應該輸出警告,至少我是如何了解它的存在。
要使用Mingw構建,請添加CMake命令:
set_target_properties(target_name PROPERTIES LINK_FLAGS "-mwindows")
將target_name
替換為目標名稱(add_executable的第一個參數)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.