diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 17871a590a3..0b193251a4c 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -701,7 +701,7 @@ void CMakeBuildSettingsWidget::updateConfigureDetailsWidgetsSummary( const FilePath buildDirectory = bc ? bc->buildDirectory() : "."; cmd.addArgs({"-S", m_buildSystem->projectDirectory().path()}); - cmd.addArgs({"-B", cmd.executable().withNewMappedPath(buildDirectory).path()}); // FIXME: Just buildDirectory.path() + cmd.addArgs({"-B", buildDirectory.path()}); cmd.addArgs(configurationArguments); params.setCommandLine(cmd); @@ -1138,7 +1138,7 @@ static CommandLine defaultInitialCMakeCommand(const Kit *k, const QString buildT // Package manager auto setup if (Internal::CMakeSpecificSettings::instance()->packageManagerAutoSetup.value()) { cmd.addArg(QString("-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=" - "%{buildDir}/%1/auto-setup.cmake") + "%{BuildConfig:BuildDirectory:NativeFilePath}/%1/auto-setup.cmake") .arg(Constants::PACKAGE_MANAGER_DIR)); } diff --git a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp index e0ce29fc75c..74220d9464a 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildstep.cpp @@ -383,7 +383,7 @@ CommandLine CMakeBuildStep::cmakeCommand() const if (buildConfiguration()) buildDirectory = buildConfiguration()->buildDirectory(); - cmd.addArgs({"--build", cmd.executable().withNewMappedPath(buildDirectory).path()}); + cmd.addArgs({"--build", buildDirectory.path()}); cmd.addArg("--target"); cmd.addArgs(Utils::transform(m_buildTargets, [this](const QString &s) { diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp index 5122f9a43ef..9ccd87edda0 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp @@ -1303,7 +1303,7 @@ MakeInstallCommand CMakeBuildSystem::makeInstallCommand(const FilePath &installR buildDirectory = bc->buildDirectory(); cmd.command.addArg("--build"); - cmd.command.addArg(cmd.command.executable().withNewMappedPath(buildDirectory).path()); + cmd.command.addArg(buildDirectory.path()); cmd.command.addArg("--target"); cmd.command.addArg(installTarget); diff --git a/src/plugins/cmakeprojectmanager/cmakeinstallstep.cpp b/src/plugins/cmakeprojectmanager/cmakeinstallstep.cpp index 2c56388804a..3f6da6e73b1 100644 --- a/src/plugins/cmakeprojectmanager/cmakeinstallstep.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeinstallstep.cpp @@ -74,7 +74,7 @@ CommandLine CMakeInstallStep::cmakeCommand() const if (buildConfiguration()) buildDirectory = buildConfiguration()->buildDirectory(); - cmd.addArgs({"--install", cmd.executable().withNewMappedPath(buildDirectory).path()}); + cmd.addArgs({"--install", buildDirectory.path()}); auto bs = qobject_cast(buildSystem()); if (bs && bs->isMultiConfigReader()) { diff --git a/src/plugins/cmakeprojectmanager/cmakeprocess.cpp b/src/plugins/cmakeprojectmanager/cmakeprocess.cpp index 4db0d519e76..2e2e221ba4c 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprocess.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprocess.cpp @@ -68,7 +68,7 @@ void CMakeProcess::run(const BuildDirParameters ¶meters, const QStringList & } const FilePath sourceDirectory = cmakeExecutable.withNewMappedPath(parameters.sourceDirectory); - const FilePath buildDirectory = cmakeExecutable.withNewMappedPath(parameters.buildDirectory); + const FilePath buildDirectory = parameters.buildDirectory; if (!buildDirectory.exists()) { const QString msg = ::CMakeProjectManager::Tr::tr( diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index 9d36167625e..124941b11a1 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -616,13 +616,27 @@ FilePath BuildConfiguration::buildDirectoryFromTemplate(const FilePath &projectD [buildType] { return buildTypeName(buildType); }); exp.registerSubProvider([kit] { return kit->macroExpander(); }); - QString buildDir = ProjectExplorerPlugin::buildDirectoryTemplate(); - qCDebug(bcLog) << "build dir template:" << buildDir; + FilePath buildDir = FilePath::fromUserInput(ProjectExplorerPlugin::buildDirectoryTemplate()); + qCDebug(bcLog) << "build dir template:" << buildDir.toUserOutput(); buildDir = exp.expand(buildDir); - qCDebug(bcLog) << "expanded build:" << buildDir; - buildDir.replace(" ", "-"); + qCDebug(bcLog) << "expanded build:" << buildDir.toUserOutput(); + buildDir = buildDir.withNewPath(buildDir.path().replace(" ", "-")); - return projectDir.resolvePath(buildDir); + auto buildDevice = BuildDeviceKitAspect::device(kit); + + if (buildDir.isAbsolutePath()) { + bool isReachable = buildDevice->ensureReachable(buildDir); + if (!isReachable) + return {}; + return buildDevice->rootPath().withNewMappedPath(buildDir); + } + + bool isReachable = buildDevice->ensureReachable(projectDir); + if (!isReachable) + return {}; + + const FilePath baseDir = buildDevice->rootPath().withNewMappedPath(projectDir); + return baseDir.resolvePath(buildDir); } /// // IBuildConfigurationFactory