VS10: Escape double quote chars in defines for rc files (#11695)
To get rc defines to work in the VS10 IDE requires \" when constructing PreprocessorDefinitions strings. This is different than defines for cl. Also, per-file rc defines were not being generated. Fix that, too.
This commit is contained in:
parent
0cde56dda4
commit
662756036e
|
@ -755,7 +755,7 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout,
|
|||
}
|
||||
fout << "\"\n";
|
||||
targetOptions.OutputFlagMap(fout, "\t\t\t\t");
|
||||
targetOptions.OutputPreprocessorDefinitions(fout, "\t\t\t\t", "\n");
|
||||
targetOptions.OutputPreprocessorDefinitions(fout, "\t\t\t\t", "\n", "CXX");
|
||||
fout << "\t\t\t\tAssemblerListingLocation=\"" << configName << "\"\n";
|
||||
fout << "\t\t\t\tObjectFile=\"$(IntDir)\\\"\n";
|
||||
if(targetBuilds)
|
||||
|
@ -789,7 +789,7 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout,
|
|||
}
|
||||
// add the -D flags to the RC tool
|
||||
fout << "\"";
|
||||
targetOptions.OutputPreprocessorDefinitions(fout, "\n\t\t\t\t", "");
|
||||
targetOptions.OutputPreprocessorDefinitions(fout, "\n\t\t\t\t", "", "RC");
|
||||
fout << "/>\n";
|
||||
tool = "VCMIDLTool";
|
||||
if(this->FortranProject)
|
||||
|
@ -1462,6 +1462,7 @@ void cmLocalVisualStudio7Generator
|
|||
else if(!fcinfo.FileConfigMap.empty())
|
||||
{
|
||||
const char* aCompilerTool = "VCCLCompilerTool";
|
||||
const char* lang = "CXX";
|
||||
if(this->FortranProject)
|
||||
{
|
||||
aCompilerTool = "VFFortranCompilerTool";
|
||||
|
@ -1479,6 +1480,7 @@ void cmLocalVisualStudio7Generator
|
|||
if(ext == "rc")
|
||||
{
|
||||
aCompilerTool = "VCResourceCompilerTool";
|
||||
lang = "RC";
|
||||
if(this->FortranProject)
|
||||
{
|
||||
aCompilerTool = "VFResourceCompilerTool";
|
||||
|
@ -1520,7 +1522,7 @@ void cmLocalVisualStudio7Generator
|
|||
fileOptions.OutputAdditionalOptions(fout, "\t\t\t\t\t", "\n");
|
||||
fileOptions.OutputFlagMap(fout, "\t\t\t\t\t");
|
||||
fileOptions.OutputPreprocessorDefinitions(fout,
|
||||
"\t\t\t\t\t", "\n");
|
||||
"\t\t\t\t\t", "\n", lang);
|
||||
}
|
||||
if(!fc.AdditionalDeps.empty())
|
||||
{
|
||||
|
|
|
@ -717,6 +717,10 @@ void cmVisualStudio10TargetGenerator::WriteCLSources()
|
|||
// is ended on a new line
|
||||
this->WriteString("</ClCompile>\n", 2);
|
||||
}
|
||||
else if(!header && rc && this->OutputSourceSpecificFlags(*source))
|
||||
{
|
||||
this->WriteString("</ResourceCompile>\n", 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
(*this->BuildFileStream ) << " />\n";
|
||||
|
@ -853,8 +857,7 @@ bool cmVisualStudio10TargetGenerator::OutputSourceSpecificFlags(
|
|||
clOptions.OutputAdditionalOptions(*this->BuildFileStream, " ", "");
|
||||
clOptions.OutputFlagMap(*this->BuildFileStream, " ");
|
||||
clOptions.OutputPreprocessorDefinitions(*this->BuildFileStream,
|
||||
" ", "\n");
|
||||
|
||||
" ", "\n", lang);
|
||||
}
|
||||
}
|
||||
return hasFlags;
|
||||
|
@ -1120,7 +1123,7 @@ void cmVisualStudio10TargetGenerator::WriteClOptions(
|
|||
}
|
||||
|
||||
clOptions.OutputPreprocessorDefinitions(*this->BuildFileStream, " ",
|
||||
"\n");
|
||||
"\n", "CXX");
|
||||
this->WriteString("<AssemblerListingLocation>", 3);
|
||||
*this->BuildFileStream << configName
|
||||
<< "</AssemblerListingLocation>\n";
|
||||
|
@ -1155,7 +1158,7 @@ WriteRCOptions(std::string const& configName,
|
|||
this->WriteString("<ResourceCompile>\n", 2);
|
||||
Options& clOptions = *(this->ClOptions[configName]);
|
||||
clOptions.OutputPreprocessorDefinitions(*this->BuildFileStream, " ",
|
||||
"\n");
|
||||
"\n", "RC");
|
||||
this->OutputIncludes(includes);
|
||||
this->WriteString("</ResourceCompile>\n", 2);
|
||||
}
|
||||
|
|
|
@ -204,7 +204,8 @@ void
|
|||
cmVisualStudioGeneratorOptions
|
||||
::OutputPreprocessorDefinitions(std::ostream& fout,
|
||||
const char* prefix,
|
||||
const char* suffix)
|
||||
const char* suffix,
|
||||
const char* lang)
|
||||
{
|
||||
if(this->Defines.empty())
|
||||
{
|
||||
|
@ -251,6 +252,11 @@ cmVisualStudioGeneratorOptions
|
|||
if(this->Version == 10)
|
||||
{
|
||||
define = cmVisualStudio10GeneratorOptionsEscapeForXML(define.c_str());
|
||||
|
||||
if(0 == strcmp(lang, "RC"))
|
||||
{
|
||||
cmSystemTools::ReplaceString(define, "\"", "\\\"");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -54,7 +54,8 @@ public:
|
|||
// Write options to output.
|
||||
void OutputPreprocessorDefinitions(std::ostream& fout,
|
||||
const char* prefix,
|
||||
const char* suffix);
|
||||
const char* suffix,
|
||||
const char* lang);
|
||||
void OutputFlagMap(std::ostream& fout, const char* indent);
|
||||
void OutputAdditionalOptions(std::ostream& fout,
|
||||
const char* prefix,
|
||||
|
|
|
@ -1,7 +1,13 @@
|
|||
cmake_minimum_required (VERSION 2.6)
|
||||
cmake_minimum_required(VERSION 2.8.3.20110118)
|
||||
project (VSResource)
|
||||
add_definitions(/DCMAKE_RCDEFINE="test.txt")
|
||||
|
||||
string(REPLACE "/INCREMENTAL:YES" ""
|
||||
CMAKE_EXE_LINKER_FLAGS_DEBUG
|
||||
"${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
|
||||
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/test.txt
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/test with spaces.txt" COPYONLY)
|
||||
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
||||
add_definitions(/DCMAKE_RCDEFINE="test with spaces.txt")
|
||||
|
||||
add_executable(VSResource main.cpp test.rc)
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
#ifdef CMAKE_RCDEFINE
|
||||
hello TEXT DISCARDABLE CMAKE_RCDEFINE
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
1 CMAKE_RCDEFINE
|
||||
END
|
||||
#else
|
||||
#error "resource compiler did not get defines from command line!"
|
||||
#endif
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue