VS: Add Resx configuration to the vcxproj file
In my project group we are using CMake to generate c++/cli winform
projects and I noticed the work done in commit 79ec7868
(VS: Add Windows
Forms Support, 2013-04-29) was in the right direction for solving some
of the problems we were facing.
The changes as submitted was breaking some functionality in our
projects, so I made some changes that fixes our problems and I believe
that it will also work for others.
* Resx files did not link correctly with the winform h-file so I added
the Resx configuration to the vcxproj file.
* I removed the functionality for setting <CLRSupport> true for the
project based on if an resx-file is pressent. This is preventing
us from using native cpp code. Also this do not address that some
projects will need to set other options like clr:pure, clr:safe.
This could be implemented as a cmake option, so it is possible to
specify exactly what is needed. Existing VSWindowsFormsResx Test
project is updated so it will be working with my changes.
This commit is contained in:
parent
90441b289d
commit
6c9712c47b
|
@ -300,7 +300,7 @@ void cmVisualStudio10TargetGenerator::Generate()
|
|||
this->WriteCustomCommands();
|
||||
this->WriteAllSources();
|
||||
this->WriteDotNetReferences();
|
||||
|
||||
this->WriteEmbeddedResourceGroup();
|
||||
this->WriteWinRTReferences();
|
||||
this->WriteProjectReferences();
|
||||
this->WriteString(
|
||||
|
@ -339,6 +339,47 @@ void cmVisualStudio10TargetGenerator::WriteDotNetReferences()
|
|||
}
|
||||
}
|
||||
|
||||
void cmVisualStudio10TargetGenerator::WriteEmbeddedResourceGroup()
|
||||
{
|
||||
std::vector<cmSourceFile*> const& resxObjs =
|
||||
this->GeneratorTarget->ResxSources;
|
||||
if(!resxObjs.empty())
|
||||
{
|
||||
this->WriteString("<ItemGroup>\n", 1);
|
||||
for(std::vector<cmSourceFile*>::const_iterator oi = resxObjs.begin();
|
||||
oi != resxObjs.end(); ++oi)
|
||||
{
|
||||
std::string obj = (*oi)->GetFullPath();
|
||||
this->WriteString("<EmbeddedResource Include=\"", 2);
|
||||
this->ConvertToWindowsSlash(obj);
|
||||
(*this->BuildFileStream ) << obj << "\">\n";
|
||||
|
||||
this->WriteString("<DependentUpon>", 3);
|
||||
std::string hFileName = obj.substr(0, obj.find_last_of(".")) + ".h";
|
||||
(*this->BuildFileStream ) << hFileName;
|
||||
this->WriteString("</DependentUpon>\n", 3);
|
||||
|
||||
std::vector<std::string> const * configs =
|
||||
this->GlobalGenerator->GetConfigurations();
|
||||
for(std::vector<std::string>::const_iterator i = configs->begin();
|
||||
i != configs->end(); ++i)
|
||||
{
|
||||
this->WritePlatformConfigTag("LogicalName", i->c_str(), 3);
|
||||
if(this->Target->GetProperty("VS_GLOBAL_ROOTNAMESPACE"))
|
||||
{
|
||||
(*this->BuildFileStream ) << "$(RootNamespace).";
|
||||
}
|
||||
(*this->BuildFileStream ) << "%(Filename)";
|
||||
(*this->BuildFileStream ) << ".resources";
|
||||
(*this->BuildFileStream ) << "</LogicalName>\n";
|
||||
}
|
||||
|
||||
this->WriteString("</EmbeddedResource>\n", 2);
|
||||
}
|
||||
this->WriteString("</ItemGroup>\n", 1);
|
||||
}
|
||||
}
|
||||
|
||||
void cmVisualStudio10TargetGenerator::WriteWinRTReferences()
|
||||
{
|
||||
std::vector<std::string> references;
|
||||
|
@ -466,11 +507,6 @@ void cmVisualStudio10TargetGenerator::WriteProjectConfigurationValues()
|
|||
"</WindowsAppContainer>\n", 2);
|
||||
}
|
||||
|
||||
if(!this->GeneratorTarget->ResxSources.empty())
|
||||
{
|
||||
this->WriteString("<CLRSupport>true</CLRSupport>\n", 2);
|
||||
}
|
||||
|
||||
this->WriteString("</PropertyGroup>\n", 1);
|
||||
}
|
||||
}
|
||||
|
@ -663,11 +699,12 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
|
|||
this->WriteGroupSources(ti->first.c_str(), ti->second, sourceGroups);
|
||||
}
|
||||
|
||||
std::vector<cmSourceFile*> resxObjs = this->GeneratorTarget->ResxSources;
|
||||
std::vector<cmSourceFile*> const& resxObjs =
|
||||
this->GeneratorTarget->ResxSources;
|
||||
if(!resxObjs.empty())
|
||||
{
|
||||
this->WriteString("<ItemGroup>\n", 1);
|
||||
for(std::vector<cmSourceFile*>::iterator oi = resxObjs.begin();
|
||||
for(std::vector<cmSourceFile*>::const_iterator oi = resxObjs.begin();
|
||||
oi != resxObjs.end(); ++oi)
|
||||
{
|
||||
std::string obj = (*oi)->GetFullPath();
|
||||
|
|
|
@ -59,6 +59,7 @@ private:
|
|||
void WriteSources(const char* tool, std::vector<cmSourceFile*> const&);
|
||||
void WriteAllSources();
|
||||
void WriteDotNetReferences();
|
||||
void WriteEmbeddedResourceGroup();
|
||||
void WriteWinRTReferences();
|
||||
void WritePathAndIncrementalLinkOptions();
|
||||
void WriteItemDefinitionGroups();
|
||||
|
|
|
@ -25,6 +25,7 @@ set(TARGET_SRC
|
|||
WindowsFormsResx/MyForm.cpp
|
||||
WindowsFormsResx/Source.cpp
|
||||
)
|
||||
set_source_files_properties(${TARGET_SRC} PROPERTIES COMPILE_FLAGS "/clr")
|
||||
|
||||
set(TARGET_RESX
|
||||
WindowsFormsResx/MyForm.resx
|
||||
|
|
Loading…
Reference in New Issue