diff --git a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp index 536ce0fdf5a..97a82d9c59b 100644 --- a/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp +++ b/src/plugins/qbsprojectmanager/defaultpropertyprovider.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include @@ -231,6 +232,29 @@ QVariantMap DefaultPropertyProvider::autoGeneratedProperties(const ProjectExplor data.insert(QLatin1String(CPP_LINKERNAME), compilerName); } data.insert(QLatin1String(CPP_TOOLCHAINPATH), cxxFileInfo.absolutePath()); + + QVariantMap m; + if (toolchain.contains(QLatin1String("clang"))) { + m[QLatin1String("c")] = m[QLatin1String("objc")] = QLatin1String("clang"); + m[QLatin1String("cpp")] = m[QLatin1String("objcpp")] = QLatin1String("clang++"); + } else if (toolchain.contains(QLatin1String("gcc"))) { + m[QLatin1String("c")] = m[QLatin1String("objc")] = QLatin1String("gcc"); + m[QLatin1String("cpp")] = m[QLatin1String("objcpp")] = QLatin1String("g++"); + } + const QString fullPrefix = cxxFileInfo.absolutePath() + QLatin1Char('/') + toolchainPrefix; + for (auto it = m.begin(); it != m.end();) { + const QString filePath = Utils::HostOsInfo::withExecutableSuffix(fullPrefix + + it.value().toString()); + if (QFile::exists(filePath)) { + it.value() = filePath; + ++it; + } else { + it = m.erase(it); + } + } + if (!m.isEmpty()) + data.insert(QLatin1String(CPP_COMPILERPATHBYLANGUAGE), m); + if (targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvc2013Flavor) { const QLatin1String flags("/FS"); data.insert(QLatin1String(CPP_PLATFORMCFLAGS), flags); diff --git a/src/plugins/qbsprojectmanager/qbsconstants.h b/src/plugins/qbsprojectmanager/qbsconstants.h index 64aea581997..f988f466354 100644 --- a/src/plugins/qbsprojectmanager/qbsconstants.h +++ b/src/plugins/qbsprojectmanager/qbsconstants.h @@ -41,6 +41,7 @@ const char QBS_ARCHITECTURE[] = "qbs.architecture"; const char QBS_ENDIANNESS[] = "qbs.endianness"; const char QBS_TOOLCHAIN[] = "qbs.toolchain"; const char CPP_TOOLCHAINPATH[] = "cpp.toolchainInstallPath"; +const char CPP_COMPILERPATHBYLANGUAGE[] = "cpp.compilerPathByLanguage"; const char CPP_TOOLCHAINPREFIX[] = "cpp.toolchainPrefix"; const char CPP_COMPILERNAME[] = "cpp.compilerName"; const char CPP_LINKERNAME[] = "cpp.linkerName";