Build apps using Visual C++ 2013 that target Windows XP, special steps are needed.
Environment Variables to Set
The following codes is quoted from this blog.
set INCLUDE=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Include;%INCLUDE%
set PATH=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Bin;%PATH%
set LIB=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Lib;%LIB%
set CL=/D_USING_V110_SDK71_;%CL%
For building x64 version, change LIB
to this one.
set LIB=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Lib\x64;%LIB%
For x86 console/windows applications, set /SUBSYSTEM
accordingly:
:: for console application
set LINK=/SUBSYSTEM:CONSOLE,5.01 %LINK%
:: for gui application
set LINK=/SUBSYSTEM:WINDOWS,5.01 %LINK%
For x64 console/windows applications:
:: for console application
set LINK=/SUBSYSTEM:CONSOLE,5.02 %LINK%
:: for gui application
set LINK=/SUBSYSTEM:WINDOWS,5.02 %LINK%
Work with CMake
In CMake there is a WIN32
parameter for add_executable
command. It works like this:
add_executable(MyExe WIN32 main.cpp) # this exe will link with /SUBSYSTEM:WINDOWS
add_executable(AnotherExe main.cpp) # this one will link with /SUBSYSTEM:CONSOLE
When we not target Windows XP, it works correctly. But when we target Windows XP, obviously the link flags are not correct. To fix that, we need add a file to override make rules in CMake. CMAKE_USER_MAKE_RULES_OVERRIDE_CXX
is for that purpose.
In your project file, add the following code.
cmake_minimum_required(VERSION 2.8)
set(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX your_path/overrides.cmake)
# please make sure the variable is set before the `project` command.
# project(MyApp)
Then in overrides.cmake
, add the following codes.
if(WIN32)
# if target winxp
if(TARGETING_XP_64)
SET(CMAKE_CREATE_WIN32_EXE /SUBSYSTEM:WINDOWS,5.02)
SET(CMAKE_CREATE_CONSOLE_EXE /SUBSYSTEM:CONSOLE,5.02)
elif(TARGETING_XP)
SET(CMAKE_CREATE_WIN32_EXE /SUBSYSTEM:WINDOWS,5.01)
SET(CMAKE_CREATE_CONSOLE_EXE /SUBSYSTEM:CONSOLE,5.01)
endif()
endif()
Now, to build targetting Windows XP, you could run cmake like the folowing.
cmake -G "YourGenerator" -DTARGETING_XP=On path_to_your_project.cmake
And the following for XP x64.
cmake -G "YourGenerator" -DTARGETING_XP_64=On path_to_your_project.cmake
No comments:
Post a Comment