diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx index cee2a0d7e..51c5a31bd 100644 --- a/Source/cmLocalUnixMakefileGenerator3.cxx +++ b/Source/cmLocalUnixMakefileGenerator3.cxx @@ -1314,7 +1314,16 @@ cmLocalUnixMakefileGenerator3 targetFullPath += ".app/Contents/MacOS/"; } #endif - targetFullPath += target.GetName(); + + // do we have a different executable name? + if (target.GetProperty("OUTPUT_NAME")) + { + targetFullPath += target.GetProperty("OUTPUT_NAME"); + } + else + { + targetFullPath += target.GetName(); + } targetFullPath += cmSystemTools::GetExecutableExtension(); // Convert to the output path to use in constructing commands. diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx index f463717d7..dfb1ca5a0 100644 --- a/Source/cmLocalVisualStudio6Generator.cxx +++ b/Source/cmLocalVisualStudio6Generator.cxx @@ -739,9 +739,11 @@ inline std::string removeQuotes(const std::string& s) } -void cmLocalVisualStudio6Generator::WriteDSPHeader(std::ostream& fout, const char *libName, - const cmTarget &target, - std::vector &) +void cmLocalVisualStudio6Generator +::WriteDSPHeader(std::ostream& fout, + const char *libName, + const cmTarget &target, + std::vector &) { std::set pathEmitted; @@ -948,7 +950,16 @@ void cmLocalVisualStudio6Generator::WriteDSPHeader(std::ostream& fout, const cha std::string extraLinkOptions; if(target.GetType() == cmTarget::EXECUTABLE) { - extraLinkOptions = m_Makefile->GetRequiredDefinition("CMAKE_EXE_LINKER_FLAGS"); + extraLinkOptions = + m_Makefile->GetRequiredDefinition("CMAKE_EXE_LINKER_FLAGS"); + + // if the executable has an output name then add the appropriate flag + if (target.GetProperty("OUTPUT_NAME")) + { + libMultiLineOptions += "# ADD LINK32 /out:"; + libMultiLineOptions += target.GetProperty("OUTPUT_NAME"); + libMultiLineOptions += " \n"; + } } if(target.GetType() == cmTarget::SHARED_LIBRARY) { diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx index 649c6e02c..3760893dd 100644 --- a/Source/cmLocalVisualStudio7Generator.cxx +++ b/Source/cmLocalVisualStudio7Generator.cxx @@ -726,7 +726,16 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout, temp = m_ExecutableOutputPath; temp += configName; temp += "/"; - temp += libName; + + // do we have a different executable name? + if (target.GetProperty("OUTPUT_NAME")) + { + temp += target.GetProperty("OUTPUT_NAME"); + } + else + { + temp += libName; + } temp += ".exe"; fout << "\t\t\t\tOutputFile=\"" << this->ConvertToXMLOutputPathSingle(temp.c_str()) << "\"\n"; for(std::map::iterator i = flagMap.begin(); diff --git a/Source/cmSetTargetPropertiesCommand.h b/Source/cmSetTargetPropertiesCommand.h index cf877f160..0dc5160a8 100644 --- a/Source/cmSetTargetPropertiesCommand.h +++ b/Source/cmSetTargetPropertiesCommand.h @@ -65,6 +65,8 @@ public: "sources. PRE_INSTALL_SCRIPT specifies CMake script that is run " "prior to installing the target. POST_INSTALL_SCRIPT specifies " "CMake script that is run after target is installed. " + "The OUTPUT_NAME can be used to set an output name that is " + "used in place of the target name when creating executables." "If not set here then it is set to target_EXPORTS by default " "(with some substitutions if target is not a valid C identifier). " "You can use and prop value pair you want and extract it later with "