[CMake] WIN32_EXECUTABLE - Config specific settings for visual studio generated project files?

Stefan Buschmann s_buschmann at gmx.de
Tue Oct 7 11:16:40 EDT 2008


Don't forget to add the preprocessor definition as well, because this might be used in some header files to check whether a WINDOWS or a CONSOLE app is going to be compiled.
I test for this definition in my own project, and it might be even used inside the Windows headers, so this should always be defined when using Subsystem:Console.

Also, shouldn't it be LINK_FLAGS_RELWITHDEBINFO and LINK_FLAGS_MINSIZEREL instead of RELWITHDEBINFO/MINSIZEREL as the property name?

So I guess it should look like this (already changed this in the Wiki):

if(WIN32)
   set_target_properties(WindowApplicationExample PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE")
   set_target_properties(WindowApplicationExample PROPERTIES COMPILE_DEFINITIONS_DEBUG "_CONSOLE")
   set_target_properties(WindowApplicationExample PROPERTIES LINK_FLAGS_RELWITHDEBINFO "/SUBSYSTEM:CONSOLE")
   set_target_properties(WindowApplicationExample PROPERTIES COMPILE_DEFINITIONS_RELWITHDEBINFO "_CONSOLE")
   set_target_properties(WindowApplicationExample PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS")
   set_target_properties(WindowApplicationExample PROPERTIES LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:WINDOWS")
endif(WIN32)


Stefan


Jason Eubank schrieb:
> Thanks Stefan, this worked well.
>
> My exact usage using your recommendations was as follows:
>
> if(WIN32)
>     set_target_properties(WindowApplicationExample PROPERTIES 
> LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE")
>     set_target_properties(WindowApplicationExample PROPERTIES 
> RELWITHDEBINFO "/SUBSYSTEM:CONSOLE")
>     set_target_properties(WindowApplicationExample PROPERTIES 
> LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS")
>     set_target_properties(WindowApplicationExample PROPERTIES 
> MINSIZEREL "/SUBSYSTEM:WINDOWS")
> endif(WIN32)
>
> This allows per-config setting of weather or not to use a console in 
> visual studio, although it does not change the actual Subsytem setting 
> in the Linker section, it does add it to the Additional Options 
> setting in the Command Line section, which is then appended to the 
> list of these settings and produces the same result.
>
> Thanks for the help!
>
> Jason
>
> On Mon, Oct 6, 2008 at 10:49 AM, Stefan Buschmann <s_buschmann at gmx.de 
> <mailto:s_buschmann at gmx.de>> wrote:
>
>     Jason Eubank schrieb:
>
>         Hello,
>
>         I am wondering if it is possible to set the target property
>         'WIN32_EXECUTABLE' on a per-config basis (i.e. you can set
>         link-flags on a per-config basis using LINK_FLAGS_<Config>).
>         From reading the documentation this does not seem possible and
>         if you set this property then all configurations (in Visual
>         Studio) use the same subsystem setting.
>
>     I don't know whether or not CMake is able to set a property on a
>     per-configuration basis. I doubt this is possible (yet), but could
>     be that I'm wrong here.
>
>     But you could simply set the appropriate flags for a console/win32
>     application yourself, without using this flag at all. The only
>     differences I could find between a win32 application and a console
>     application are
>     - Linker flag: "/SUBSYSTEM:CONSOLE" for console apps and
>     "/SUBSYSTEM:WINDOWS" for win32 apps
>     - Preprocessor definition: '_CONSOLE' for console apps
>
>     Setting these using LINK_FLAGS_<Config> and
>     COMPILE_DEFINITIONS_<Config> should do exactly what you want. The
>     only problem I see that could possibly arise is that you can't
>     depend on the WIN32_EXECUTABLE flag in your CMake file(s) anymore,
>     to test for it or use it in any other way later.
>
>     Another solution that comes to my mind is to always create a win32
>     application, and then open a console window later by using the
>     win32 function 'AllocConsole' in your code. I never really needed
>     this, but I know those functions are there to create or attach a
>     console window to a win32 application. Have a look at the
>     documentation for this function.
>
>     Stefan
>
>     _______________________________________________
>     CMake mailing list
>     CMake at cmake.org <mailto:CMake at cmake.org>
>     http://www.cmake.org/mailman/listinfo/cmake
>
>



More information about the CMake mailing list