فهرست منبع

BUG: When executable output path is not set, we still need to generate the full path to the executable target.

Brad King 22 سال پیش
والد
کامیت
2db5cc8c31
1فایلهای تغییر یافته به همراه29 افزوده شده و 2 حذف شده
  1. 29 2
      Source/cmLocalUnixMakefileGenerator.cxx

+ 29 - 2
Source/cmLocalUnixMakefileGenerator.cxx

@@ -1093,9 +1093,21 @@ void cmLocalUnixMakefileGenerator::OutputExecutableRule(std::ostream& fout,
   std::string buildType =  this->GetSafeDefinition("CMAKE_BUILD_TYPE");
   buildType = cmSystemTools::UpperCase(buildType);
   std::string flags;
-  std::string target = m_ExecutableOutputPath + name 
-    + cmSystemTools::GetExecutableExtension(); 
+  
+  // Construct the full path to the executable that will be generated.
+  std::string target = m_ExecutableOutputPath;
+  if(target.length() == 0)
+    {
+    target = m_Makefile->GetCurrentOutputDirectory();
+    if(target.size() && target[target.size()-1] != '/')
+      {
+      target += "/";
+      }
+    }
+  target += name;
+  target += cmSystemTools::GetExecutableExtension();
   target = cmSystemTools::ConvertToOutputPath(target.c_str());
+  
   std::string objs = "$(" + this->CreateMakeVariable(name, "_SRC_OBJS") + ") ";
   std::string depend = "$(";
   depend += this->CreateMakeVariable(name, "_SRC_OBJS") 
@@ -1189,6 +1201,21 @@ void cmLocalUnixMakefileGenerator::OutputExecutableRule(std::ostream& fout,
                        target.c_str(),
                        depend.c_str(),
                        commands);
+  
+  // If there is no executable output path, add a rule with the
+  // relative path to the executable.  This is necessary for
+  // try-compile to work in this case.
+  if(m_ExecutableOutputPath.length() == 0)
+    {
+    target = name;
+    target += cmSystemTools::GetExecutableExtension();
+    target = cmSystemTools::ConvertToOutputPath(target.c_str());
+    this->OutputMakeRule(fout, 
+                         comment.c_str(),
+                         target.c_str(),
+                         depend.c_str(),
+                         commands);
+    }
 }