From 14bbf8340ac4d285b61afb5b61ebc4c730f4b4fa Mon Sep 17 00:00:00 2001 From: Patrick Gansterer Date: Wed, 10 Jul 2013 19:11:04 +0200 Subject: [PATCH 1/6] Unify the way the flags of a static library are read Introduce cmLocalGenerator::GetStaticLibraryFlags() to have a central function for getting the linker flags for a given target. --- Source/cmGlobalXCodeGenerator.cxx | 34 ++++++++++++--------- Source/cmLocalGenerator.cxx | 33 ++++++++------------ Source/cmLocalGenerator.h | 5 +++ Source/cmLocalVisualStudio7Generator.cxx | 12 +------- Source/cmMakefileLibraryTargetGenerator.cxx | 8 ++--- Source/cmVisualStudio10TargetGenerator.cxx | 13 +++----- 6 files changed, 45 insertions(+), 60 deletions(-) diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index 63de1a51d..7cb2d1f9c 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -1769,27 +1769,31 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target, configName); } - const char* linkFlagsProp = "LINK_FLAGS"; if(target.GetType() == cmTarget::OBJECT_LIBRARY || target.GetType() == cmTarget::STATIC_LIBRARY) { - linkFlagsProp = "STATIC_LIBRARY_FLAGS"; + this->CurrentLocalGenerator + ->GetStaticLibraryFlags(extraLinkOptions, + cmSystemTools::UpperCase(configName), + &target); } - const char* targetLinkFlags = target.GetProperty(linkFlagsProp); - if(targetLinkFlags) + else { - extraLinkOptions += " "; - extraLinkOptions += targetLinkFlags; - } - if(configName && *configName) - { - std::string linkFlagsVar = linkFlagsProp; - linkFlagsVar += "_"; - linkFlagsVar += cmSystemTools::UpperCase(configName); - if(const char* linkFlags = target.GetProperty(linkFlagsVar.c_str())) + const char* targetLinkFlags = target.GetProperty("LINK_FLAGS"); + if(targetLinkFlags) { - extraLinkOptions += " "; - extraLinkOptions += linkFlags; + this->CurrentLocalGenerator-> + AppendFlags(extraLinkOptions, targetLinkFlags); + } + if(configName && *configName) + { + std::string linkFlagsVar = "LINK_FLAGS_"; + linkFlagsVar += cmSystemTools::UpperCase(configName); + if(const char* linkFlags = target.GetProperty(linkFlagsVar.c_str())) + { + this->CurrentLocalGenerator-> + AppendFlags(extraLinkOptions, linkFlags); + } } } diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index b187d6b84..75ff7b3d4 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -1541,6 +1541,18 @@ void cmLocalGenerator::GetIncludeDirectories(std::vector& dirs, } } +void cmLocalGenerator::GetStaticLibraryFlags(std::string& flags, + std::string const& config, + cmTarget* target) +{ + this->AppendFlags(flags, target->GetProperty("STATIC_LIBRARY_FLAGS")); + if(!config.empty()) + { + std::string name = "STATIC_LIBRARY_FLAGS_" + config; + this->AppendFlags(flags, target->GetProperty(name.c_str())); + } +} + void cmLocalGenerator::GetTargetFlags(std::string& linkLibs, std::string& flags, std::string& linkFlags, @@ -1557,26 +1569,7 @@ void cmLocalGenerator::GetTargetFlags(std::string& linkLibs, switch(target->GetType()) { case cmTarget::STATIC_LIBRARY: - { - const char* targetLinkFlags = - target->GetProperty("STATIC_LIBRARY_FLAGS"); - if(targetLinkFlags) - { - linkFlags += targetLinkFlags; - linkFlags += " "; - } - if(!buildType.empty()) - { - std::string build = "STATIC_LIBRARY_FLAGS_"; - build += buildType; - targetLinkFlags = target->GetProperty(build.c_str()); - if(targetLinkFlags) - { - linkFlags += targetLinkFlags; - linkFlags += " "; - } - } - } + this->GetStaticLibraryFlags(linkFlags, buildType, target->Target); break; case cmTarget::MODULE_LIBRARY: libraryLinkVariable = "CMAKE_MODULE_LINKER_FLAGS"; diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h index ed0f6e3c4..10f0b1a6c 100644 --- a/Source/cmLocalGenerator.h +++ b/Source/cmLocalGenerator.h @@ -348,6 +348,11 @@ public: std::string const& dir_max, bool* hasSourceExtension = 0); + /** Fill out the static linker flags for the given target. */ + void GetStaticLibraryFlags(std::string& flags, + std::string const& config, + cmTarget* target); + /** Fill out these strings for the given target. Libraries to link, * flags, and linkflags. */ void GetTargetFlags(std::string& linkLibs, diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx index 9ecd53db4..672edf475 100644 --- a/Source/cmLocalVisualStudio7Generator.cxx +++ b/Source/cmLocalVisualStudio7Generator.cxx @@ -1039,17 +1039,7 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout, } } std::string libflags; - if(const char* flags = target.GetProperty("STATIC_LIBRARY_FLAGS")) - { - libflags += flags; - } - std::string libFlagsConfig = "STATIC_LIBRARY_FLAGS_"; - libFlagsConfig += configTypeUpper; - if(const char* flagsConfig = target.GetProperty(libFlagsConfig.c_str())) - { - libflags += " "; - libflags += flagsConfig; - } + this->GetStaticLibraryFlags(libflags, configTypeUpper, &target); if(!libflags.empty()) { fout << "\t\t\t\tAdditionalOptions=\"" << libflags << "\"\n"; diff --git a/Source/cmMakefileLibraryTargetGenerator.cxx b/Source/cmMakefileLibraryTargetGenerator.cxx index 347f26d26..ea9663f2e 100644 --- a/Source/cmMakefileLibraryTargetGenerator.cxx +++ b/Source/cmMakefileLibraryTargetGenerator.cxx @@ -144,12 +144,8 @@ void cmMakefileLibraryTargetGenerator::WriteStaticLibraryRules() } std::string extraFlags; - this->LocalGenerator->AppendFlags - (extraFlags,this->Target->GetProperty("STATIC_LIBRARY_FLAGS")); - std::string staticLibraryFlagsConfig = "STATIC_LIBRARY_FLAGS_"; - staticLibraryFlagsConfig += cmSystemTools::UpperCase(this->ConfigName); - this->LocalGenerator->AppendFlags - (extraFlags, this->Target->GetProperty(staticLibraryFlagsConfig.c_str())); + this->LocalGenerator->GetStaticLibraryFlags(extraFlags, + cmSystemTools::UpperCase(this->ConfigName), this->Target); this->WriteLibraryRules(linkRuleVar.c_str(), extraFlags.c_str(), false); } diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index d59de116c..da5696ac2 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -1417,20 +1417,17 @@ cmVisualStudio10TargetGenerator::WriteLibOptions(std::string const& config) { return; } - const char* libflags = this->Target->GetProperty("STATIC_LIBRARY_FLAGS"); - std::string flagsConfigVar = "STATIC_LIBRARY_FLAGS_"; - flagsConfigVar += cmSystemTools::UpperCase(config); - const char* libflagsConfig = - this->Target->GetProperty(flagsConfigVar.c_str()); - if(libflags || libflagsConfig) + std::string libflags; + this->LocalGenerator->GetStaticLibraryFlags(libflags, + cmSystemTools::UpperCase(config), this->Target); + if(!libflags.empty()) { this->WriteString("\n", 2); cmVisualStudioGeneratorOptions libOptions(this->LocalGenerator, cmVisualStudioGeneratorOptions::Linker, cmVSGetLibFlagTable(this->LocalGenerator), 0, this); - libOptions.Parse(libflags?libflags:""); - libOptions.Parse(libflagsConfig?libflagsConfig:""); + libOptions.Parse(libflags.c_str()); libOptions.OutputAdditionalOptions(*this->BuildFileStream, " ", ""); libOptions.OutputFlagMap(*this->BuildFileStream, " "); this->WriteString("\n", 2); From 2a43c306fe434b87b087586c2e45d3e1fbe56d33 Mon Sep 17 00:00:00 2001 From: Patrick Gansterer Date: Sun, 7 Apr 2013 17:39:05 +0200 Subject: [PATCH 2/6] Add support for CMAKE_STATIC_LINKER_FLAGS Add the content of this variable to the target specific linker flags as we do with the other CMAKE_*_LINKER_FLAGS variables already. --- Source/cmLocalGenerator.cxx | 7 +++ Source/cmLocalVisualStudio6Generator.cxx | 65 ++++++++++++------------ 2 files changed, 40 insertions(+), 32 deletions(-) diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 75ff7b3d4..b515727b0 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -1545,6 +1545,13 @@ void cmLocalGenerator::GetStaticLibraryFlags(std::string& flags, std::string const& config, cmTarget* target) { + this->AppendFlags(flags, + this->Makefile->GetSafeDefinition("CMAKE_STATIC_LINKER_FLAGS")); + if(!config.empty()) + { + std::string name = "CMAKE_STATIC_LINKER_FLAGS_" + config; + this->AppendFlags(flags, this->Makefile->GetSafeDefinition(name.c_str())); + } this->AppendFlags(flags, target->GetProperty("STATIC_LIBRARY_FLAGS")); if(!config.empty()) { diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx index df6e1f1e9..5ca8aba9e 100644 --- a/Source/cmLocalVisualStudio6Generator.cxx +++ b/Source/cmLocalVisualStudio6Generator.cxx @@ -1435,38 +1435,39 @@ void cmLocalVisualStudio6Generator std::string staticLibOptionsRelWithDebInfo; if(target.GetType() == cmTarget::STATIC_LIBRARY ) { - if(const char* libflags = target.GetProperty("STATIC_LIBRARY_FLAGS")) - { - staticLibOptions = libflags; - staticLibOptionsDebug = libflags; - staticLibOptionsRelease = libflags; - staticLibOptionsMinSizeRel = libflags; - staticLibOptionsRelWithDebInfo = libflags; - } - if(const char* libflagsDebug = - target.GetProperty("STATIC_LIBRARY_FLAGS_DEBUG")) - { - staticLibOptionsDebug += " "; - staticLibOptionsDebug = libflagsDebug; - } - if(const char* libflagsRelease = - target.GetProperty("STATIC_LIBRARY_FLAGS_RELEASE")) - { - staticLibOptionsRelease += " "; - staticLibOptionsRelease = libflagsRelease; - } - if(const char* libflagsMinSizeRel = - target.GetProperty("STATIC_LIBRARY_FLAGS_MINSIZEREL")) - { - staticLibOptionsMinSizeRel += " "; - staticLibOptionsMinSizeRel = libflagsMinSizeRel; - } - if(const char* libflagsRelWithDebInfo = - target.GetProperty("STATIC_LIBRARY_FLAGS_RELWITHDEBINFO")) - { - staticLibOptionsRelWithDebInfo += " "; - staticLibOptionsRelWithDebInfo = libflagsRelWithDebInfo; - } + const char *libflagsGlobal = + this->Makefile->GetSafeDefinition("CMAKE_STATIC_LINKER_FLAGS"); + this->AppendFlags(staticLibOptions, libflagsGlobal); + this->AppendFlags(staticLibOptionsDebug, libflagsGlobal); + this->AppendFlags(staticLibOptionsRelease, libflagsGlobal); + this->AppendFlags(staticLibOptionsMinSizeRel, libflagsGlobal); + this->AppendFlags(staticLibOptionsRelWithDebInfo, libflagsGlobal); + + this->AppendFlags(staticLibOptionsDebug, this->Makefile-> + GetSafeDefinition("CMAKE_STATIC_LINKER_FLAGS_DEBUG")); + this->AppendFlags(staticLibOptionsRelease, this->Makefile-> + GetSafeDefinition("CMAKE_STATIC_LINKER_FLAGS_RELEASE")); + this->AppendFlags(staticLibOptionsMinSizeRel, this->Makefile-> + GetSafeDefinition("CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL")); + this->AppendFlags(staticLibOptionsRelWithDebInfo, this->Makefile-> + GetSafeDefinition("CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO")); + + const char *libflags = target.GetProperty("STATIC_LIBRARY_FLAGS"); + this->AppendFlags(staticLibOptions, libflags); + this->AppendFlags(staticLibOptionsDebug, libflags); + this->AppendFlags(staticLibOptionsRelease, libflags); + this->AppendFlags(staticLibOptionsMinSizeRel, libflags); + this->AppendFlags(staticLibOptionsRelWithDebInfo, libflags); + + this->AppendFlags(staticLibOptionsDebug, + target.GetProperty("STATIC_LIBRARY_FLAGS_DEBUG")); + this->AppendFlags(staticLibOptionsRelease, + target.GetProperty("STATIC_LIBRARY_FLAGS_RELEASE")); + this->AppendFlags(staticLibOptionsMinSizeRel, + target.GetProperty("STATIC_LIBRARY_FLAGS_MINSIZEREL")); + this->AppendFlags(staticLibOptionsRelWithDebInfo, + target.GetProperty("STATIC_LIBRARY_FLAGS_RELWITHDEBINFO")); + std::string objects; this->OutputObjects(target, "LIB", objects); if(!objects.empty()) From 54f7019fd06d2aaabeb24f6f5b0379e574cb9fb8 Mon Sep 17 00:00:00 2001 From: Patrick Gansterer Date: Thu, 11 Jul 2013 10:18:56 +0200 Subject: [PATCH 3/6] Add CMAKE_STATIC_LINKER_FLAGS to CMakeCommonLanguageInclude Add support for CMAKE_STATIC_LINKER_FLAGS_* to CMakeCommonLanguageInclude.cmake to set the defaults similar to the other CMAKE_*_LINKER_FLAGS_*. --- Modules/CMakeCommonLanguageInclude.cmake | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Modules/CMakeCommonLanguageInclude.cmake b/Modules/CMakeCommonLanguageInclude.cmake index bf94f9ff6..e945aa7c8 100644 --- a/Modules/CMakeCommonLanguageInclude.cmake +++ b/Modules/CMakeCommonLanguageInclude.cmake @@ -68,6 +68,19 @@ if(NOT CMAKE_NOT_USING_CONFIG_FLAGS) ${CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO_INIT} CACHE STRING "Flags used by the linker during Release with Debug Info builds.") + set (CMAKE_STATIC_LINKER_FLAGS_DEBUG ${CMAKE_STATIC_LINKER_FLAGS_DEBUG_INIT} CACHE STRING + "Flags used by the linker during debug builds.") + + set (CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL ${CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL_INIT} + CACHE STRING + "Flags used by the linker during release minsize builds.") + + set (CMAKE_STATIC_LINKER_FLAGS_RELEASE ${CMAKE_STATIC_LINKER_FLAGS_RELEASE_INIT} CACHE STRING + "Flags used by the linker during release builds.") + + set (CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO + ${CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO_INIT} CACHE STRING + "Flags used by the linker during Release with Debug Info builds.") endif() # shared linker flags set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS_INIT} $ENV{LDFLAGS}" @@ -77,6 +90,10 @@ set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS_INIT} $ENV{LDFLAGS}" set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS_INIT} $ENV{LDFLAGS}" CACHE STRING "Flags used by the linker during the creation of modules.") +# static linker flags +set (CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS_INIT}" + CACHE STRING "Flags used by the linker during the creation of static libraries.") + set(CMAKE_BUILD_TOOL ${CMAKE_MAKE_PROGRAM} CACHE INTERNAL "What is the target build tool cmake is generating for.") @@ -103,5 +120,10 @@ CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL CMAKE_MODULE_LINKER_FLAGS_RELEASE CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO ) From 20ed496b6d98bd2e28c2657c3383dd0cdbae9f4d Mon Sep 17 00:00:00 2001 From: Patrick Gansterer Date: Thu, 11 Jul 2013 10:21:08 +0200 Subject: [PATCH 4/6] Add documentation for the missing CMAKE_*_LINKER_FLAGS_* variables Add CMAKE_MODULE_LINKER_FLAGS_*, CMAKE_SHARED_LINKER_FLAGS_* and CMAKE_STATIC_LINKER_FLAGS_* to cmDocumentVariables.cxx with a similar documentation as CMAKE_EXE_LINKER_FLAGS_*. --- Source/cmDocumentVariables.cxx | 43 ++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/Source/cmDocumentVariables.cxx b/Source/cmDocumentVariables.cxx index cfd5e76df..5877f5843 100644 --- a/Source/cmDocumentVariables.cxx +++ b/Source/cmDocumentVariables.cxx @@ -1426,6 +1426,49 @@ void cmDocumentVariables::DefineVariables(cmake* cm) "Same as CMAKE_C_FLAGS_* but used by the linker " "when creating executables.",false, "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_MODULE_LINKER_FLAGS", cmProperty::VARIABLE, + "Linker flags to be used to create modules.", + "These flags will be used by the linker when creating a module." + ,false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_MODULE_LINKER_FLAGS_", cmProperty::VARIABLE, + "Flags to be used when linking a module.", + "Same as CMAKE_C_FLAGS_* but used by the linker " + "when creating modules.",false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_SHARED_LINKER_FLAGS", cmProperty::VARIABLE, + "Linker flags to be used to create shared libraries.", + "These flags will be used by the linker when creating a shared library." + ,false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_SHARED_LINKER_FLAGS_", cmProperty::VARIABLE, + "Flags to be used when linking a shared library.", + "Same as CMAKE_C_FLAGS_* but used by the linker " + "when creating shared libraries.",false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_STATIC_LINKER_FLAGS", cmProperty::VARIABLE, + "Linker flags to be used to create static libraries.", + "These flags will be used by the linker when creating a static library." + ,false, + "Variables that Control the Build"); + + cm->DefineProperty + ("CMAKE_STATIC_LINKER_FLAGS_", cmProperty::VARIABLE, + "Flags to be used when linking a static library.", + "Same as CMAKE_C_FLAGS_* but used by the linker " + "when creating static libraries.",false, + "Variables that Control the Build"); + cm->DefineProperty ("CMAKE_LIBRARY_PATH_FLAG", cmProperty::VARIABLE, "The flag to be used to add a library search path to a compiler.", From 152dfdab11f66f4675c7f9af1cff6d301b1e271a Mon Sep 17 00:00:00 2001 From: Patrick Gansterer Date: Sun, 28 Jul 2013 20:34:16 +0200 Subject: [PATCH 5/6] Add additonal tests for the linker flags Extend Tests/LinkFlags to test libraries of the type MODULE and the content of the CMAKE_*_LINKER_FLAGS_* variables. --- Tests/CMakeLists.txt | 14 ++++++++++++-- Tests/LinkFlags/CMakeLists.txt | 9 +++++++++ Tests/LinkFlags/LinkerFlags/CMakeLists.txt | 11 +++++++++++ Tests/LinkFlags/LinkerFlagsConfig/CMakeLists.txt | 11 +++++++++++ 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 Tests/LinkFlags/LinkerFlags/CMakeLists.txt create mode 100644 Tests/LinkFlags/LinkerFlagsConfig/CMakeLists.txt diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 440cdf08e..16693dee4 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -394,10 +394,20 @@ if(BUILD_TESTING) endmacro() ADD_LINK_FLAGS_TEST(lib prepare) ADD_LINK_FLAGS_TEST(dll lib) - ADD_LINK_FLAGS_TEST(exe dll) + ADD_LINK_FLAGS_TEST(mod dll) + ADD_LINK_FLAGS_TEST(exe mod) ADD_LINK_FLAGS_TEST(lib_config exe) ADD_LINK_FLAGS_TEST(dll_config lib_config) - ADD_LINK_FLAGS_TEST(exe_config dll_config) + ADD_LINK_FLAGS_TEST(mod_config dll_config) + ADD_LINK_FLAGS_TEST(exe_config mod_config) + ADD_LINK_FLAGS_TEST(lib_flags exe_config) + ADD_LINK_FLAGS_TEST(dll_flags lib_flags) + ADD_LINK_FLAGS_TEST(mod_flags dll_flags) + ADD_LINK_FLAGS_TEST(exe_flags mod_flags) + ADD_LINK_FLAGS_TEST(lib_flags_config exe_flags) + ADD_LINK_FLAGS_TEST(dll_flags_config lib_flags_config) + ADD_LINK_FLAGS_TEST(mod_flags_config dll_flags_config) + ADD_LINK_FLAGS_TEST(exe_flags_config mod_flags_config) # If we are running right now with a UnixMakefiles based generator, # build the "Simple" test with the ExtraGenerators, if available diff --git a/Tests/LinkFlags/CMakeLists.txt b/Tests/LinkFlags/CMakeLists.txt index e06020c25..460703542 100644 --- a/Tests/LinkFlags/CMakeLists.txt +++ b/Tests/LinkFlags/CMakeLists.txt @@ -13,6 +13,9 @@ set_property(TARGET LinkFlags_lib PROPERTY STATIC_LIBRARY_FLAGS ${pre}BADFLAG${o add_library(LinkFlags_dll SHARED LinkFlagsLib.c) set_property(TARGET LinkFlags_dll PROPERTY LINK_FLAGS ${pre}BADFLAG${obj}) +add_library(LinkFlags_mod MODULE LinkFlagsLib.c) +set_property(TARGET LinkFlags_mod PROPERTY LINK_FLAGS ${pre}BADFLAG${obj}) + add_executable(LinkFlags_exe LinkFlagsExe.c) set_property(TARGET LinkFlags_exe PROPERTY LINK_FLAGS ${pre}BADFLAG${obj}) @@ -22,7 +25,13 @@ set_property(TARGET LinkFlags_lib_config PROPERTY STATIC_LIBRARY_FLAGS_${TEST_CO add_library(LinkFlags_dll_config SHARED LinkFlagsLib.c) set_property(TARGET LinkFlags_dll_config PROPERTY LINK_FLAGS_${TEST_CONFIG_UPPER} ${pre}BADFLAG_${TEST_CONFIG}${obj}) +add_library(LinkFlags_mod_config MODULE LinkFlagsLib.c) +set_property(TARGET LinkFlags_mod_config PROPERTY LINK_FLAGS_${TEST_CONFIG_UPPER} ${pre}BADFLAG_${TEST_CONFIG}${obj}) + add_executable(LinkFlags_exe_config LinkFlagsExe.c) set_property(TARGET LinkFlags_exe_config PROPERTY LINK_FLAGS_${TEST_CONFIG_UPPER} ${pre}BADFLAG_${TEST_CONFIG}${obj}) add_executable(LinkFlags LinkFlags.c) + +add_subdirectory(LinkerFlags) +add_subdirectory(LinkerFlagsConfig) diff --git a/Tests/LinkFlags/LinkerFlags/CMakeLists.txt b/Tests/LinkFlags/LinkerFlags/CMakeLists.txt new file mode 100644 index 000000000..4707f474c --- /dev/null +++ b/Tests/LinkFlags/LinkerFlags/CMakeLists.txt @@ -0,0 +1,11 @@ +set(CMAKE_STATIC_LINKER_FLAGS ${pre}BADFLAG${obj}) +add_library(LinkFlags_lib_flags STATIC ../LinkFlagsLib.c) + +set(CMAKE_SHARED_LINKER_FLAGS ${pre}BADFLAG${obj}) +add_library(LinkFlags_dll_flags SHARED ../LinkFlagsLib.c) + +set(CMAKE_MODULE_LINKER_FLAGS ${pre}BADFLAG${obj}) +add_library(LinkFlags_mod_flags MODULE ../LinkFlagsLib.c) + +set(CMAKE_EXE_LINKER_FLAGS ${pre}BADFLAG${obj}) +add_executable(LinkFlags_exe_flags ../LinkFlagsExe.c) diff --git a/Tests/LinkFlags/LinkerFlagsConfig/CMakeLists.txt b/Tests/LinkFlags/LinkerFlagsConfig/CMakeLists.txt new file mode 100644 index 000000000..2854fe78b --- /dev/null +++ b/Tests/LinkFlags/LinkerFlagsConfig/CMakeLists.txt @@ -0,0 +1,11 @@ +set(CMAKE_STATIC_LINKER_FLAGS_${TEST_CONFIG_UPPER} ${pre}BADFLAG${obj}) +add_library(LinkFlags_lib_flags_config STATIC ../LinkFlagsLib.c) + +set(CMAKE_SHARED_LINKER_FLAGS_${TEST_CONFIG_UPPER} ${pre}BADFLAG${obj}) +add_library(LinkFlags_dll_flags_config SHARED ../LinkFlagsLib.c) + +set(CMAKE_MODULE_LINKER_FLAGS_${TEST_CONFIG_UPPER} ${pre}BADFLAG${obj}) +add_library(LinkFlags_mod_flags_config MODULE ../LinkFlagsLib.c) + +set(CMAKE_EXE_LINKER_FLAGS_${TEST_CONFIG_UPPER} ${pre}BADFLAG${obj}) +add_executable(LinkFlags_exe_flags_config ../LinkFlagsExe.c) From 33e6e0b9c2ae26c8d077e577ded49debb75d1070 Mon Sep 17 00:00:00 2001 From: Patrick Gansterer Date: Tue, 30 Jul 2013 12:23:50 +0200 Subject: [PATCH 6/6] VS6: Add handling of CMAKE_*_LINKER_FLAGS_ variables Read the content of the config specific linker flags in the Visual Studio 6 generator too. --- Source/cmLocalVisualStudio6Generator.cxx | 36 ++++++++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx index 5ca8aba9e..667d86f4c 100644 --- a/Source/cmLocalVisualStudio6Generator.cxx +++ b/Source/cmLocalVisualStudio6Generator.cxx @@ -1171,18 +1171,42 @@ void cmLocalVisualStudio6Generator std::string extraLinkOptionsRelWithDebInfo; if(target.GetType() == cmTarget::EXECUTABLE) { - extraLinkOptions = - this->Makefile->GetRequiredDefinition("CMAKE_EXE_LINKER_FLAGS"); + extraLinkOptions = this->Makefile-> + GetRequiredDefinition("CMAKE_EXE_LINKER_FLAGS"); + extraLinkOptionsDebug = this->Makefile-> + GetRequiredDefinition("CMAKE_EXE_LINKER_FLAGS_DEBUG"); + extraLinkOptionsRelease = this->Makefile-> + GetRequiredDefinition("CMAKE_EXE_LINKER_FLAGS_RELEASE"); + extraLinkOptionsMinSizeRel = this->Makefile-> + GetRequiredDefinition("CMAKE_EXE_LINKER_FLAGS_MINSIZEREL"); + extraLinkOptionsRelWithDebInfo = this->Makefile-> + GetRequiredDefinition("CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO"); } if(target.GetType() == cmTarget::SHARED_LIBRARY) { - extraLinkOptions = - this->Makefile->GetRequiredDefinition("CMAKE_SHARED_LINKER_FLAGS"); + extraLinkOptions = this->Makefile-> + GetRequiredDefinition("CMAKE_SHARED_LINKER_FLAGS"); + extraLinkOptionsDebug = this->Makefile-> + GetRequiredDefinition("CMAKE_SHARED_LINKER_FLAGS_DEBUG"); + extraLinkOptionsRelease = this->Makefile-> + GetRequiredDefinition("CMAKE_SHARED_LINKER_FLAGS_RELEASE"); + extraLinkOptionsMinSizeRel = this->Makefile-> + GetRequiredDefinition("CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL"); + extraLinkOptionsRelWithDebInfo = this->Makefile-> + GetRequiredDefinition("CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO"); } if(target.GetType() == cmTarget::MODULE_LIBRARY) { - extraLinkOptions = - this->Makefile->GetRequiredDefinition("CMAKE_MODULE_LINKER_FLAGS"); + extraLinkOptions = this->Makefile-> + GetRequiredDefinition("CMAKE_MODULE_LINKER_FLAGS"); + extraLinkOptionsDebug = this->Makefile-> + GetRequiredDefinition("CMAKE_MODULE_LINKER_FLAGS_DEBUG"); + extraLinkOptionsRelease = this->Makefile-> + GetRequiredDefinition("CMAKE_MODULE_LINKER_FLAGS_RELEASE"); + extraLinkOptionsMinSizeRel = this->Makefile-> + GetRequiredDefinition("CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL"); + extraLinkOptionsRelWithDebInfo = this->Makefile-> + GetRequiredDefinition("CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO"); } // Get extra linker options for this target.