Как удержать программу 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 должен фактически вывести предупреждение, если вы не установите эту политику, по крайней мере, так я узнал о ее существовании.