Difference between revisions of "Building on Windows"

From ProgrammingExamples
Jump to: navigation, search
(Created page with 'A typical CMakeLists.txt file on this site looks like this: <source lang="cmake"> cmake_minimum_required(VERSION 2.6) PROJECT(FileMenu) FIND_PACKAGE(Qt4 REQUIRED) INCLUDE(${QT_…')
 
 
Line 37: Line 37:
 
set_target_properties(FileMenu PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS")
 
set_target_properties(FileMenu PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS")
  
 +
</source>
 +
 +
If you want to set this for all build modes, simply use:
 +
<source lang="cmake">
 +
set_target_properties(FileMenu PROPERTIES LINK_FLAGS "/SUBSYSTEM:WINDOWS") # works for all build modes
 
</source>
 
</source>

Latest revision as of 13:56, 16 September 2012

A typical CMakeLists.txt file on this site looks like this:

cmake_minimum_required(VERSION 2.6)
PROJECT(FileMenu)
 
FIND_PACKAGE(Qt4 REQUIRED)
INCLUDE(${QT_USE_FILE})
 
QT4_WRAP_UI(UISrcs main.ui)
QT4_WRAP_CPP(MOCSrcs filemenu.h)
 
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
 
ADD_EXECUTABLE(FileMenu main.cpp filemenu.h filemenu.cpp ${MOCSrcs} ${UISrcs})
TARGET_LINK_LIBRARIES(FileMenu ${QT_LIBRARIES})

However, when you build and run in Windows, you will get a console window that appears along with your GUI program. To fix this, you must do two things. First, add ${QT_QTMAIN_LIBRARY} to your target_link_libraries command. Second, you must specify /SUBSYSTEM:WINDOWS for all build configurations (Release, Debug, etc) that you want to not pop up the console window. An example is below, where when built in release mode, no console will appear:

cmake_minimum_required(VERSION 2.6)
 
PROJECT(FileMenu)
 
FIND_PACKAGE(Qt4 REQUIRED)
INCLUDE(${QT_USE_FILE})
 
QT4_WRAP_UI(UISrcs main.ui)
QT4_WRAP_CPP(MOCSrcs filemenu.h)
 
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
 
ADD_EXECUTABLE(FileMenu main.cpp filemenu.h filemenu.cpp ${MOCSrcs} ${UISrcs})
TARGET_LINK_LIBRARIES(FileMenu ${QT_QTMAIN_LIBRARY} ${QT_LIBRARIES})
 
set_target_properties(FileMenu PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS")

If you want to set this for all build modes, simply use:

set_target_properties(FileMenu PROPERTIES LINK_FLAGS "/SUBSYSTEM:WINDOWS") # works for all build modes