Răsfoiți Sursa

BUG: better fix for .dll.lib problem

Bill Hoffman 19 ani în urmă
părinte
comite
5ff037e894
3 a modificat fișierele cu 17 adăugiri și 4 ștergeri
  1. 3 2
      Source/cmOrderLinkDirectories.cxx
  2. 8 1
      Source/cmTarget.cxx
  3. 6 1
      Tests/LibName/CMakeLists.txt

+ 3 - 2
Source/cmOrderLinkDirectories.cxx

@@ -466,8 +466,9 @@ bool cmOrderLinkDirectories::DetermineLibraryPathOrder()
     // check to see if the file is a full path or just contains 
     // a / in it and is a path to something
     cmStdString& item = this->RawLinkItems[i];
-    if(cmSystemTools::FileIsFullPath(item.c_str())
-       || item.find("/") != item.npos)
+    // if it is a full path to an item then separate it from the path
+    // this only works with files and paths
+    if(cmSystemTools::FileIsFullPath(item.c_str()))
       {
       if(cmSystemTools::FileIsDirectory(this->RawLinkItems[i].c_str()))
         {

+ 8 - 1
Source/cmTarget.cxx

@@ -864,7 +864,14 @@ const char* cmTarget::GetDirectory(const char* config)
     {
     this->Directory = this->Makefile->GetStartOutputDirectory();
     }
-
+  // if LIBRARY_OUTPUT_PATH or EXECUTABLE_OUTPUT_PATH was relative
+  // then make them full paths because this directory MUST 
+  // be a full path or things will not work!!!
+  if(!cmSystemTools::FileIsFullPath(this->Directory.c_str()))
+    {
+    this->Directory = this->Makefile->GetCurrentOutputDirectory() + 
+      std::string("/") + this->Directory;
+    }
   if(config)
     {
     // Add the configuration's subdirectory.

+ 6 - 1
Tests/LibName/CMakeLists.txt

@@ -1,8 +1,13 @@
 project(LibName)
-set(LIBRARY_OUTPUT_PATH lib)
+# this is a test to make sure that relative path 
+# LIBRARY_OUTPUT_PATH and EXECUTABLE_OUTPUT_PATH work
+set(LIBRARY_OUTPUT_PATH  lib)
 set(EXECUTABLE_OUTPUT_PATH lib)
 add_library(bar SHARED bar.c)
 add_library(foo SHARED foo.c)
 target_link_libraries(foo bar)
 add_executable(foobar foobar.c)
 target_link_libraries(foobar foo)
+IF(UNIX)
+  target_link_libraries(foobar -L/usr/local/lib)
+ENDIF(UNIX)