Browse Source

ENH: Make add_custom_command interpret relative OUTPUT locations with respect to the build tre instead of the source tree. This can greatly simplify user code since generating a file will not need to reference CMAKE_CURRENT_BINARY_DIR. The new behavior is what users expect 99% of the time.

Brad King 18 years ago
parent
commit
e9503a174e
2 changed files with 14 additions and 1 deletions
  1. 11 1
      Source/cmAddCustomCommandCommand.cxx
  2. 3 0
      Source/cmAddCustomCommandCommand.h

+ 11 - 1
Source/cmAddCustomCommandCommand.cxx

@@ -152,7 +152,17 @@ bool cmAddCustomCommandCommand
         case doing_outputs:
           if (!cmSystemTools::FileIsFullPath(copy.c_str()))
             {
-            filename = this->Makefile->GetStartDirectory();
+            // This is an output to be generated, so it should be
+            // under the build tree.  CMake 2.4 placed this under the
+            // source tree.  However the only case that this change
+            // will break is when someone writes
+            //
+            //   add_custom_command(OUTPUT out.txt ...)
+            //
+            // and later references "${CMAKE_CURRENT_SOURCE_DIR}/out.txt".
+            // This is fairly obscure so we can wait for someone to
+            // complain.
+            filename = this->Makefile->GetCurrentOutputDirectory();
             filename += "/";
             }
           filename += copy;

+ 3 - 0
Source/cmAddCustomCommandCommand.h

@@ -78,6 +78,9 @@ public:
       "This defines a new command that can be executed during the build "
       "process. The outputs named should be listed as source files in the "
       "target for which they are to be generated. "
+      "If an output name is a relative path it will be interpreted "
+      "relative to the build tree directory corresponding to the current "
+      "source directory. "
       "Note that MAIN_DEPENDENCY is completely optional and is "
       "used as a suggestion to visual studio about where to hang the "
       "custom command. In makefile terms this creates a new target in the "