Ver Fonte

ENH: make sure things do not depend on optimized libraries if they are debug, and the other way around as well

Bill Hoffman há 19 anos atrás
pai
commit
f2e8fd06c2
2 ficheiros alterados com 20 adições e 1 exclusões
  1. 15 1
      Source/cmMakefileTargetGenerator.cxx
  2. 5 0
      Tests/Simple/CMakeLists.txt

+ 15 - 1
Source/cmMakefileTargetGenerator.cxx

@@ -1136,7 +1136,13 @@ void cmMakefileTargetGenerator
     {
     return;
     }
-
+  // Compute which library configuration to link.
+  cmTarget::LinkLibraryType linkType = cmTarget::OPTIMIZED;
+  if(cmSystemTools::UpperCase(
+       this->LocalGenerator->ConfigurationName.c_str()) == "DEBUG")
+    {
+    linkType = cmTarget::DEBUG;
+    }
   // Keep track of dependencies already listed.
   std::set<cmStdString> emitted;
 
@@ -1149,6 +1155,14 @@ void cmMakefileTargetGenerator
   for(cmTarget::LinkLibraryVectorType::const_iterator lib = tlibs.begin();
       lib != tlibs.end(); ++lib)
     {
+    // skip the library if it is not general and the link type
+    // does not match the current target
+    if(lib->second != cmTarget::GENERAL &&
+       lib->second != linkType)
+      {
+      continue;
+      }
+       
     // Don't emit the same library twice for this target.
     if(emitted.insert(lib->first).second)
       {

+ 5 - 0
Tests/Simple/CMakeLists.txt

@@ -10,3 +10,8 @@ add_library (simpleLib STATIC
   )
 
 target_link_libraries (simple simpleLib)
+
+# make sure optimized libs are not used by debug builds
+if(CMAKE_BUILD_TYPE MATCHES Debug)
+  target_link_libraries(simple optimized c:/not/here.lib )
+endif(CMAKE_BUILD_TYPE MATCHES Debug)