[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