浏览代码

Add projectDir parameter to GenerateBuildCommand

Extend the cmGlobalGenerator::GenerateBuildCommand virtual method
signature with a "projectDir" parameter specifying the top of the
project build tree for which the build command will be generated.
Populate it from call sites in cmGlobalGenerator::Build where a
fully-generated build tree should be available.
Petr Kmoch 12 年之前
父节点
当前提交
de8be9ef7d

+ 1 - 1
Source/CPack/cmCPackGenerator.cxx

@@ -638,7 +638,7 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects(
           = this->MakefileMap->GetDefinition("CMAKE_MAKE_PROGRAM");
           = this->MakefileMap->GetDefinition("CMAKE_MAKE_PROGRAM");
         std::string buildCommand
         std::string buildCommand
           = globalGenerator->GenerateBuildCommand(cmakeMakeProgram,
           = globalGenerator->GenerateBuildCommand(cmakeMakeProgram,
-            installProjectName.c_str(), 0,
+            installProjectName.c_str(), 0, 0,
             globalGenerator->GetPreinstallTargetName(),
             globalGenerator->GetPreinstallTargetName(),
             buildConfig, false, false);
             buildConfig, false, false);
         cmCPackLogger(cmCPackLog::LOG_DEBUG,
         cmCPackLogger(cmCPackLog::LOG_DEBUG,

+ 1 - 1
Source/CTest/cmCTestBuildCommand.cxx

@@ -133,7 +133,7 @@ cmCTestGenericHandler* cmCTestBuildCommand::InitializeHandler()
       std::string buildCommand
       std::string buildCommand
         = this->GlobalGenerator->
         = this->GlobalGenerator->
         GenerateBuildCommand(cmakeMakeProgram,
         GenerateBuildCommand(cmakeMakeProgram,
-                             cmakeProjectName,
+                             cmakeProjectName, 0,
                              cmakeBuildAdditionalFlags, cmakeBuildTarget,
                              cmakeBuildAdditionalFlags, cmakeBuildTarget,
                              cmakeBuildConfiguration, true, false);
                              cmakeBuildConfiguration, true, false);
       cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
       cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT,

+ 2 - 2
Source/cmBuildCommand.cxx

@@ -122,7 +122,7 @@ bool cmBuildCommand
   //
   //
   std::string makecommand = this->Makefile->GetLocalGenerator()
   std::string makecommand = this->Makefile->GetLocalGenerator()
     ->GetGlobalGenerator()->GenerateBuildCommand
     ->GetGlobalGenerator()->GenerateBuildCommand
-    (makeprogram, project_name, 0, target, configuration, true, false);
+    (makeprogram, project_name, 0, 0, target, configuration, true, false);
 
 
   this->Makefile->AddDefinition(variable, makecommand.c_str());
   this->Makefile->AddDefinition(variable, makecommand.c_str());
 
 
@@ -153,7 +153,7 @@ bool cmBuildCommand
 
 
   std::string makecommand = this->Makefile->GetLocalGenerator()
   std::string makecommand = this->Makefile->GetLocalGenerator()
     ->GetGlobalGenerator()->GenerateBuildCommand
     ->GetGlobalGenerator()->GenerateBuildCommand
-    (makeprogram.c_str(), this->Makefile->GetProjectName(), 0,
+    (makeprogram.c_str(), this->Makefile->GetProjectName(), 0, 0,
      0, configType.c_str(), true, false);
      0, configType.c_str(), true, false);
 
 
   if(cacheValue)
   if(cacheValue)

+ 7 - 5
Source/cmGlobalGenerator.cxx

@@ -1340,11 +1340,13 @@ int cmGlobalGenerator::TryCompile(const char *srcdir, const char *bindir,
 
 
 std::string cmGlobalGenerator
 std::string cmGlobalGenerator
 ::GenerateBuildCommand(const char* makeProgram, const char *projectName,
 ::GenerateBuildCommand(const char* makeProgram, const char *projectName,
-                       const char* additionalOptions, const char *targetName,
-                       const char* config, bool ignoreErrors, bool)
+                       const char *projectDir, const char* additionalOptions,
+                       const char *targetName, const char* config,
+                       bool ignoreErrors, bool)
 {
 {
-  // Project name and config are not used yet.
+  // Project name & dir and config are not used yet.
   (void)projectName;
   (void)projectName;
+  (void)projectDir;
   (void)config;
   (void)config;
 
 
   std::string makeCommand =
   std::string makeCommand =
@@ -1411,7 +1413,7 @@ int cmGlobalGenerator::Build(
   if (clean)
   if (clean)
     {
     {
     std::string cleanCommand =
     std::string cleanCommand =
-      this->GenerateBuildCommand(makeCommandCSTR, projectName,
+      this->GenerateBuildCommand(makeCommandCSTR, projectName, bindir,
       0, "clean", config, false, fast);
       0, "clean", config, false, fast);
     if(output)
     if(output)
       {
       {
@@ -1443,7 +1445,7 @@ int cmGlobalGenerator::Build(
 
 
   // now build
   // now build
   std::string makeCommand =
   std::string makeCommand =
-    this->GenerateBuildCommand(makeCommandCSTR, projectName,
+    this->GenerateBuildCommand(makeCommandCSTR, projectName, bindir,
                                extraOptions, target,
                                extraOptions, target,
                                config, false, fast);
                                config, false, fast);
   if(output)
   if(output)

+ 4 - 3
Source/cmGlobalGenerator.h

@@ -121,9 +121,10 @@ public:
 
 
   virtual std::string GenerateBuildCommand(
   virtual std::string GenerateBuildCommand(
     const char* makeProgram,
     const char* makeProgram,
-    const char *projectName, const char* additionalOptions,
-    const char *targetName,
-    const char* config, bool ignoreErrors, bool fast);
+    const char *projectName, const char *projectDir,
+    const char* additionalOptions,
+    const char *targetName, const char* config,
+    bool ignoreErrors, bool fast);
 
 
 
 
   ///! Set the CMake instance
   ///! Set the CMake instance

+ 3 - 1
Source/cmGlobalNinjaGenerator.cxx

@@ -523,14 +523,16 @@ bool cmGlobalNinjaGenerator::UsingMinGW = false;
 std::string cmGlobalNinjaGenerator
 std::string cmGlobalNinjaGenerator
 ::GenerateBuildCommand(const char* makeProgram,
 ::GenerateBuildCommand(const char* makeProgram,
                        const char* projectName,
                        const char* projectName,
+                       const char* projectDir,
                        const char* additionalOptions,
                        const char* additionalOptions,
                        const char* targetName,
                        const char* targetName,
                        const char* config,
                        const char* config,
                        bool ignoreErrors,
                        bool ignoreErrors,
                        bool fast)
                        bool fast)
 {
 {
-  // Project name and config are not used yet.
+  // Project name & dir and config are not used yet.
   (void)projectName;
   (void)projectName;
+  (void)projectDir;
   (void)config;
   (void)config;
   // Ninja does not have -i equivalent option yet.
   // Ninja does not have -i equivalent option yet.
   (void)ignoreErrors;
   (void)ignoreErrors;

+ 1 - 0
Source/cmGlobalNinjaGenerator.h

@@ -191,6 +191,7 @@ public:
   /// Overloaded methods. @see cmGlobalGenerator::GenerateBuildCommand()
   /// Overloaded methods. @see cmGlobalGenerator::GenerateBuildCommand()
   virtual std::string GenerateBuildCommand(const char* makeProgram,
   virtual std::string GenerateBuildCommand(const char* makeProgram,
                                            const char* projectName,
                                            const char* projectName,
+                                           const char* projectDir,
                                            const char* additionalOptions,
                                            const char* additionalOptions,
                                            const char* targetName,
                                            const char* targetName,
                                            const char* config,
                                            const char* config,

+ 5 - 3
Source/cmGlobalUnixMakefileGenerator3.cxx

@@ -517,11 +517,13 @@ cmGlobalUnixMakefileGenerator3
 
 
 std::string cmGlobalUnixMakefileGenerator3
 std::string cmGlobalUnixMakefileGenerator3
 ::GenerateBuildCommand(const char* makeProgram, const char *projectName,
 ::GenerateBuildCommand(const char* makeProgram, const char *projectName,
-                       const char* additionalOptions, const char *targetName,
-                       const char* config, bool ignoreErrors, bool fast)
+                       const char *projectDir, const char* additionalOptions,
+                       const char *targetName, const char* config,
+                       bool ignoreErrors, bool fast)
 {
 {
-  // Project name and config are not used yet.
+  // Project name & dir and config are not used yet.
   (void)projectName;
   (void)projectName;
+  (void)projectDir;
   (void)config;
   (void)config;
 
 
   std::string makeCommand =
   std::string makeCommand =

+ 2 - 1
Source/cmGlobalUnixMakefileGenerator3.h

@@ -107,7 +107,8 @@ public:
   // change the build command for speed
   // change the build command for speed
   virtual std::string GenerateBuildCommand
   virtual std::string GenerateBuildCommand
   (const char* makeProgram,
   (const char* makeProgram,
-   const char *projectName, const char* additionalOptions,
+   const char *projectName, const char *projectDir,
+   const char* additionalOptions,
    const char *targetName,
    const char *targetName,
    const char* config, bool ignoreErrors, bool fast);
    const char* config, bool ignoreErrors, bool fast);
 
 

+ 3 - 2
Source/cmGlobalVisualStudio10Generator.cxx

@@ -215,7 +215,7 @@ std::string cmGlobalVisualStudio10Generator::GetUserMacrosRegKeyBase()
 
 
 std::string cmGlobalVisualStudio10Generator
 std::string cmGlobalVisualStudio10Generator
 ::GenerateBuildCommand(const char* makeProgram,
 ::GenerateBuildCommand(const char* makeProgram,
-                       const char *projectName,
+                       const char *projectName, const char *projectDir,
                        const char* additionalOptions, const char *targetName,
                        const char* additionalOptions, const char *targetName,
                        const char* config, bool ignoreErrors, bool fast)
                        const char* config, bool ignoreErrors, bool fast)
 {
 {
@@ -230,7 +230,8 @@ std::string cmGlobalVisualStudio10Generator
       lowerCaseCommand.find("VCExpress") != std::string::npos)
       lowerCaseCommand.find("VCExpress") != std::string::npos)
     {
     {
     return cmGlobalVisualStudio7Generator::GenerateBuildCommand(makeProgram,
     return cmGlobalVisualStudio7Generator::GenerateBuildCommand(makeProgram,
-      projectName, additionalOptions, targetName, config, ignoreErrors, fast);
+      projectName, projectDir, additionalOptions, targetName, config,
+      ignoreErrors, fast);
     }
     }
 
 
   // Otherwise, assume MSBuild command line, and construct accordingly.
   // Otherwise, assume MSBuild command line, and construct accordingly.

+ 1 - 1
Source/cmGlobalVisualStudio10Generator.h

@@ -32,7 +32,7 @@ public:
 
 
   virtual std::string
   virtual std::string
   GenerateBuildCommand(const char* makeProgram,
   GenerateBuildCommand(const char* makeProgram,
-                       const char *projectName,
+                       const char *projectName, const char *projectDir,
                        const char* additionalOptions, const char *targetName,
                        const char* additionalOptions, const char *targetName,
                        const char* config, bool ignoreErrors, bool);
                        const char* config, bool ignoreErrors, bool);
 
 

+ 3 - 0
Source/cmGlobalVisualStudio6Generator.cxx

@@ -80,12 +80,15 @@ void cmGlobalVisualStudio6Generator::GenerateConfigurations(cmMakefile* mf)
 std::string cmGlobalVisualStudio6Generator
 std::string cmGlobalVisualStudio6Generator
 ::GenerateBuildCommand(const char* makeProgram,
 ::GenerateBuildCommand(const char* makeProgram,
                        const char *projectName,
                        const char *projectName,
+                       const char *projectDir,
                        const char* additionalOptions,
                        const char* additionalOptions,
                        const char *targetName,
                        const char *targetName,
                        const char* config,
                        const char* config,
                        bool ignoreErrors,
                        bool ignoreErrors,
                        bool)
                        bool)
 {
 {
+  // Visual studio 6 doesn't need project dir
+  (void) projectDir;
   // Ingoring errors is not implemented in visual studio 6
   // Ingoring errors is not implemented in visual studio 6
   (void) ignoreErrors;
   (void) ignoreErrors;
 
 

+ 1 - 0
Source/cmGlobalVisualStudio6Generator.h

@@ -54,6 +54,7 @@ public:
    */
    */
   virtual std::string GenerateBuildCommand(const char* makeProgram,
   virtual std::string GenerateBuildCommand(const char* makeProgram,
                                            const char *projectName,
                                            const char *projectName,
+                                           const char *projectDir,
                                            const char* additionalOptions,
                                            const char* additionalOptions,
                                            const char *targetName,
                                            const char *targetName,
                                            const char* config,
                                            const char* config,

+ 3 - 1
Source/cmGlobalVisualStudio7Generator.cxx

@@ -56,10 +56,12 @@ void cmGlobalVisualStudio7Generator
 
 
 std::string cmGlobalVisualStudio7Generator
 std::string cmGlobalVisualStudio7Generator
 ::GenerateBuildCommand(const char* makeProgram,
 ::GenerateBuildCommand(const char* makeProgram,
-                       const char *projectName,
+                       const char *projectName, const char *projectDir,
                        const char* additionalOptions, const char *targetName,
                        const char* additionalOptions, const char *targetName,
                        const char* config, bool ignoreErrors, bool)
                        const char* config, bool ignoreErrors, bool)
 {
 {
+  // Visual studio 7 doesn't need project dir
+  (void) projectDir;
   // Ingoring errors is not implemented in visual studio 6
   // Ingoring errors is not implemented in visual studio 6
   (void) ignoreErrors;
   (void) ignoreErrors;
 
 

+ 1 - 0
Source/cmGlobalVisualStudio7Generator.h

@@ -55,6 +55,7 @@ public:
    */
    */
   virtual std::string GenerateBuildCommand(const char* makeProgram,
   virtual std::string GenerateBuildCommand(const char* makeProgram,
                                            const char *projectName,
                                            const char *projectName,
+                                           const char *projectDir,
                                            const char* additionalOptions,
                                            const char* additionalOptions,
                                            const char *targetName,
                                            const char *targetName,
                                            const char* config,
                                            const char* config,

+ 2 - 0
Source/cmGlobalXCodeGenerator.cxx

@@ -260,6 +260,7 @@ void cmGlobalXCodeGenerator::EnableLanguage(std::vector<std::string>const&
 std::string cmGlobalXCodeGenerator
 std::string cmGlobalXCodeGenerator
 ::GenerateBuildCommand(const char* makeProgram,
 ::GenerateBuildCommand(const char* makeProgram,
                        const char *projectName,
                        const char *projectName,
+                       const char *projectDir,
                        const char* additionalOptions,
                        const char* additionalOptions,
                        const char *targetName,
                        const char *targetName,
                        const char* config,
                        const char* config,
@@ -268,6 +269,7 @@ std::string cmGlobalXCodeGenerator
 {
 {
   // Config is not used yet
   // Config is not used yet
   (void) ignoreErrors;
   (void) ignoreErrors;
+  (void) projectDir;
 
 
   // now build the test
   // now build the test
   if(makeProgram == 0 || !strlen(makeProgram))
   if(makeProgram == 0 || !strlen(makeProgram))

+ 1 - 0
Source/cmGlobalXCodeGenerator.h

@@ -55,6 +55,7 @@ public:
    */
    */
   virtual std::string GenerateBuildCommand(const char* makeProgram,
   virtual std::string GenerateBuildCommand(const char* makeProgram,
                                            const char *projectName,
                                            const char *projectName,
+                                           const char *projectDir,
                                            const char* additionalOptions,
                                            const char* additionalOptions,
                                            const char *targetName,
                                            const char *targetName,
                                            const char* config,
                                            const char* config,