VS: Support setting correct subsystem and entry point for WinCE

WinCE has only one SubSystem. So the WIN32_EXECUTABLE property
must be handled via the EntryPointSymbol in the vcproj files.
This commit is contained in:
Patrick Gansterer 2012-11-20 12:38:06 +01:00 committed by Brad King
parent 6920fed652
commit 2118a2016f
3 changed files with 21 additions and 3 deletions

View File

@ -72,6 +72,9 @@ public:
i.e. "Can I build Debug and Release in the same tree?" */
virtual bool IsMultiConfig() { return true; }
/** Return true if building for Windows CE */
virtual bool TargetsWindowsCE() const { return false; }
class TargetSet: public std::set<cmTarget*> {};
struct TargetCompare
{

View File

@ -229,6 +229,9 @@ void cmLocalVisualStudio7Generator
this->FortranProject =
static_cast<cmGlobalVisualStudioGenerator*>(this->GlobalGenerator)
->TargetIsFortranOnly(target);
this->WindowsCEProject =
static_cast<cmGlobalVisualStudioGenerator*>(this->GlobalGenerator)
->TargetsWindowsCE();
// Intel Fortran for VS10 uses VS9 format ".vfproj" files.
VSVersion realVersion = this->Version;
@ -1173,6 +1176,8 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
cmComputeLinkInformation& cli = *pcli;
const char* linkLanguage = cli.GetLinkLanguage();
bool isWin32Executable = target.GetPropertyAsBool("WIN32_EXECUTABLE");
// Compute the variable name to lookup standard libraries for this
// language.
std::string standardLibsVar = "CMAKE_";
@ -1220,15 +1225,24 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
{
fout << "\t\t\t\tGenerateDebugInformation=\"TRUE\"\n";
}
if ( target.GetPropertyAsBool("WIN32_EXECUTABLE") )
if ( this->WindowsCEProject )
{
fout << "\t\t\t\tSubSystem=\"9\"\n"
<< "\t\t\t\tEntryPointSymbol=\""
<< (isWin32Executable ? "WinMainCRTStartup" : "mainACRTStartup")
<< "\"\n";
}
else if ( this->FortranProject )
{
fout << "\t\t\t\tSubSystem=\""
<< (this->FortranProject? "subSystemWindows" : "2") << "\"\n";
<< (isWin32Executable ? "subSystemWindows" : "subSystemConsole")
<< "\"\n";
}
else
{
fout << "\t\t\t\tSubSystem=\""
<< (this->FortranProject? "subSystemConsole" : "1") << "\"\n";
<< (isWin32Executable ? "2" : "1")
<< "\"\n";
}
std::string stackVar = "CMAKE_";
stackVar += linkLanguage;

View File

@ -122,6 +122,7 @@ private:
cmVS7FlagTable const* ExtraFlagTable;
std::string ModuleDefinitionFile;
bool FortranProject;
bool WindowsCEProject;
std::string PlatformName; // Win32 or x64
cmLocalVisualStudio7GeneratorInternals* Internal;
};