Explorar el Código

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

Bill Hoffman hace 19 años
padre
commit
f2e8fd06c2
Se han modificado 2 ficheros con 20 adiciones y 1 borrados
  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)