diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.cpp b/src/plugins/cmakeprojectmanager/builddirmanager.cpp
index 9c03f543c0a243f1ec7d85b48a46b4f6fdb7fc3f..cdce5ee44f361f47ccf20764e758ab2c85f1f031 100644
--- a/src/plugins/cmakeprojectmanager/builddirmanager.cpp
+++ b/src/plugins/cmakeprojectmanager/builddirmanager.cpp
@@ -72,31 +72,7 @@ namespace Internal {
 
 static QStringList toArguments(const CMakeConfig &config, const Kit *k) {
     return Utils::transform(config, [k](const CMakeConfigItem &i) -> QString {
-        QString a = QString::fromLatin1("-D");
-        a.append(QString::fromUtf8(i.key));
-        switch (i.type) {
-        case CMakeConfigItem::FILEPATH:
-            a.append(QLatin1String(":FILEPATH="));
-            break;
-        case CMakeConfigItem::PATH:
-            a.append(QLatin1String(":PATH="));
-            break;
-        case CMakeConfigItem::BOOL:
-            a.append(QLatin1String(":BOOL="));
-            break;
-        case CMakeConfigItem::STRING:
-            a.append(QLatin1String(":STRING="));
-            break;
-        case CMakeConfigItem::INTERNAL:
-            a.append(QLatin1String(":INTERNAL="));
-            break;
-        case CMakeConfigItem::STATIC:
-            a.append(QLatin1String(":STATIC="));
-            break;
-        }
-        a.append(i.expandedValue(k));
-
-        return a;
+        return i.toArgument(k->macroExpander());
     });
 }
 
diff --git a/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp b/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp
index 226b2b6915258fd8d232b606c030f4824cfd24fa..fdf1fc0e4587383be2d6fcf71693917a81b44fa8 100644
--- a/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp
@@ -245,6 +245,11 @@ QString CMakeConfigItem::toString(const Utils::MacroExpander *expander) const
     return QString::fromUtf8(key) + QLatin1Char(':') + typeStr + QLatin1Char('=') + expandedValue;
 }
 
+QString CMakeConfigItem::toArgument(const Utils::MacroExpander *expander) const
+{
+    return "-D" + toString(expander);
+}
+
 bool CMakeConfigItem::operator==(const CMakeConfigItem &o) const
 {
     // type, isAdvanced and documentation do not matter for a match!
diff --git a/src/plugins/cmakeprojectmanager/cmakeconfigitem.h b/src/plugins/cmakeprojectmanager/cmakeconfigitem.h
index bbee1eb8b160c377e135e1bf0fcf0573a037a130..24e5c54cd9de10cddfa1dbc2b0c6a5de88e9b280 100644
--- a/src/plugins/cmakeprojectmanager/cmakeconfigitem.h
+++ b/src/plugins/cmakeprojectmanager/cmakeconfigitem.h
@@ -55,6 +55,7 @@ public:
     static std::function<bool(const CMakeConfigItem &a, const CMakeConfigItem &b)> sortOperator();
     static CMakeConfigItem fromString(const QString &s);
     QString toString(const Utils::MacroExpander *expander = nullptr) const;
+    QString toArgument(const Utils::MacroExpander *expander = nullptr) const;
 
     bool operator==(const CMakeConfigItem &o) const;