Как удержать программу Qt C++ от открытия консоли в Windows?
Я делаю приложение в Qt Creator, с cmake и MinGW в качестве компилятора. Я видел, что на этот вопрос отвечают другие люди ,но они использовали регулярные проекты Qt.pro файлы, в то время как я использую CMakeLists.txt-файл. Так что эти посты мне не помогли.
проблема в том, что мое приложение открывает консоль при загрузке, и, как обычно, закрытие этой консоли также закроет приложение. Я хочу, чтобы приложение не открывало консоль, так что это больше удобный для людей, которым не нужна отладочная информация и тому подобное.
5 ответов
у вас, скорее всего, будет строка, такая как следующая в ваших CMakeLists.txt:
ADD_EXECUTABLE(exename ....)
где, конечно, точки дальнейших рассуждений. Измените это на:
ADD_EXECUTABLE(exename [WIN32] ...)
чтобы указать, что это приложение Win32, а не консольное приложение.
или, как можно найти на сайте CMAKE "если WIN32
присваивается свойство WIN32_EXECUTABLE
будет установлен на созданные целью."И когда WIN32_EXECUTABLE установлен, он будет"построить исполняемый файл с точкой входа WinMain в windows."
у меня была такая же проблема, но решил ее добавив:
#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
по умолчанию, и в отличие от qmake, cmake создает приложения Qt с включенным консольным окном под windows (двоичные файлы 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
свойство не влияет при компиляции на платформах, отличных от windows (см. CMAKE_WIN32_EXECUTABLE
).
С WIN32
переменная cmake,WIN32_EXECUTABLE
свойство также настраивает окно консоли при компиляции исполняемого файла win64.
для построения с Mingw добавьте команду CMake:
set_target_properties(target_name PROPERTIES LINK_FLAGS "-mwindows")
заменить target_name
С именем вашей цели (первый параметр для add_executable)
Это старый вопрос, но в любом случае, существует лучшее решение, чем все остальные размещены здесь:
CMAKE_POLICY(SET CMP0020 NEW)
добавление этого автоматически обработает все для вас. CMake должен фактически вывести предупреждение, если вы не установите эту политику, по крайней мере, так я узнал о ее существовании.