diff --git a/build/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfiguration.java b/build/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfiguration.java
index c7ea5cd..1b7fec9 100644
--- a/build/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfiguration.java
+++ b/build/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfiguration.java
@@ -60,12 +60,12 @@
 	}
 
 	public CMakeBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain) {
-		this(config, name, toolChain, null);
+		this(config, name, toolChain, null, "run"); //$NON-NLS-1$
 	}
 
 	public CMakeBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain,
-			ICMakeToolChainFile toolChainFile) {
-		super(config, name, toolChain);
+			ICMakeToolChainFile toolChainFile, String launchMode) {
+		super(config, name, toolChain, launchMode);
 		this.toolChainFile = toolChainFile;
 
 		if (toolChainFile != null) {
@@ -120,6 +120,13 @@
 					command.add("-DCMAKE_TOOLCHAIN_FILE=" + toolChainFile.getPath().toString()); //$NON-NLS-1$
 				}
 
+				switch (getLaunchMode()) {
+				// TODO what to do with other modes
+				case "debug": //$NON-NLS-1$
+					command.add("-DCMAKE_BUILD_TYPE=Debug"); //$NON-NLS-1$
+					break;
+				}
+
 				command.add("-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"); //$NON-NLS-1$
 				command.add(new File(project.getLocationURI()).getAbsolutePath());
 
diff --git a/build/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfigurationProvider.java b/build/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfigurationProvider.java
index 6478a62..4fe7a6d 100644
--- a/build/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfigurationProvider.java
+++ b/build/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfigurationProvider.java
@@ -29,7 +29,6 @@
 	public static final String ID = "org.eclipse.cdt.cmake.core.provider"; //$NON-NLS-1$
 
 	private ICMakeToolChainManager manager = Activator.getService(ICMakeToolChainManager.class);
-	private IToolChainManager tcManager = Activator.getService(IToolChainManager.class);
 	private ICBuildConfigurationManager configManager = Activator.getService(ICBuildConfigurationManager.class);
 
 	@Override
@@ -79,7 +78,8 @@
 			ICBuildConfiguration cconfig = config.getAdapter(ICBuildConfiguration.class);
 			if (cconfig != null) {
 				CMakeBuildConfiguration cmakeConfig = cconfig.getAdapter(CMakeBuildConfiguration.class);
-				if (cmakeConfig != null && cmakeConfig.getToolChain().equals(toolChain)) {
+				if (cmakeConfig != null && cmakeConfig.getToolChain().equals(toolChain)
+						&& launchMode.equals(cmakeConfig.getLaunchMode())) {
 					return cconfig;
 				}
 			}
@@ -104,7 +104,8 @@
 		// create config
 		String configName = "cmake." + launchMode + '.' + toolChain.getId(); //$NON-NLS-1$
 		IBuildConfiguration config = configManager.createBuildConfiguration(this, project, configName, monitor);
-		CMakeBuildConfiguration cmakeConfig = new CMakeBuildConfiguration(config, configName, toolChain, file);
+		CMakeBuildConfiguration cmakeConfig = new CMakeBuildConfiguration(config, configName, toolChain, file,
+				launchMode);
 		configManager.addBuildConfiguration(config, cmakeConfig);
 		return cmakeConfig;
 	}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java
index 53adab3..ff4d69a 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java
@@ -92,12 +92,14 @@
 	private static final String TOOLCHAIN_TYPE = "cdt.toolChain.type"; //$NON-NLS-1$
 	private static final String TOOLCHAIN_ID = "cdt.toolChain.id"; //$NON-NLS-1$
 	private static final String TOOLCHAIN_VERSION = "cdt.toolChain.version"; //$NON-NLS-1$
+	private static final String LAUNCH_MODE = "cdt.launchMode"; //$NON-NLS-1$
 
 	private static final List<String> DEFAULT_COMMAND = new ArrayList<>(0);
 
 	private final String name;
 	private final IBuildConfiguration config;
 	private final IToolChain toolChain;
+	private String launchMode;
 
 	private final Map<IResource, List<IScannerInfoChangeListener>> scannerInfoListeners = new HashMap<>();
 	private ScannerInfoCache scannerInfoCache;
@@ -127,12 +129,23 @@
 			}
 		}
 		toolChain = tc;
+
+		launchMode = settings.get(LAUNCH_MODE, null); // $NON-NLS-1$
 	}
 
 	protected CBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain) {
+		this(config, name, toolChain, "run"); //$NON-NLS-1$
+	}
+
+	/**
+	 * @since 6.2
+	 */
+	protected CBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain,
+			String launchMode) {
 		this.config = config;
 		this.name = name;
 		this.toolChain = toolChain;
+		this.launchMode = launchMode;
 
 		Preferences settings = getSettings();
 		settings.put(TOOLCHAIN_TYPE, toolChain.getProvider().getId());
@@ -158,6 +171,27 @@
 		return name;
 	}
 
+	/**
+	 * @since 6.2
+	 */
+	public String getLaunchMode() {
+		return launchMode;
+	}
+
+	/**
+	 * @since 6.2
+	 */
+	protected void setLaunchMode(String launchMode) {
+		this.launchMode = launchMode;
+		Preferences settings = getSettings();
+		settings.put(LAUNCH_MODE, launchMode);
+		try {
+			settings.flush();
+		} catch (BackingStoreException e) {
+			CCorePlugin.log(e);
+		}
+	}
+
 	public IProject getProject() {
 		return config.getProject();
 	}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfiguration.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfiguration.java
index d2bd857..3236ea2 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfiguration.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfiguration.java
@@ -57,7 +57,6 @@
 	private static final String QTINSTALL_SPEC = "cdt.qt.install.spec"; //$NON-NLS-1$
 	private static final String LAUNCH_MODE = "cdt.qt.launchMode"; //$NON-NLS-1$
 
-	private final String launchMode;
 	private final String qtInstallSpec;
 	private IQtInstall qtInstall;
 	private Map<String, String> properties;
@@ -89,15 +88,23 @@
 					Activator.error(String.format("Qt Install for build configuration %s not found.", name)));
 		}
 
-		launchMode = settings.get(LAUNCH_MODE, null); // $NON-NLS-1$
+		String oldLaunchMode = settings.get(LAUNCH_MODE, null);
+		if (oldLaunchMode != null) {
+			setLaunchMode(oldLaunchMode);
+			settings.remove(LAUNCH_MODE);
+			try {
+				settings.flush();
+			} catch (BackingStoreException e) {
+				Activator.log(e);
+			}
+		}
 	}
 
 	QtBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain, IQtInstall qtInstall,
 			String launchMode) throws CoreException {
-		super(config, name, toolChain);
+		super(config, name, toolChain, launchMode);
 		this.qtInstall = qtInstall;
 		this.qtInstallSpec = qtInstall.getSpec();
-		this.launchMode = launchMode;
 
 		IQtInstallManager manager = Activator.getService(IQtInstallManager.class);
 		manager.addListener(this);
@@ -136,17 +143,13 @@
 	}
 
 	@Override
-	public String getLaunchMode() {
-		return launchMode;
-	}
-
-	@Override
 	public Path getQmakeCommand() {
 		return getQtInstall().getQmakePath();
 	}
 
 	@Override
 	public String[] getQmakeConfig() {
+		String launchMode = getLaunchMode();
 		if (launchMode != null) {
 			switch (launchMode) {
 			case "run": //$NON-NLS-1$
@@ -185,7 +188,7 @@
 		case Platform.OS_WIN32:
 			return getBuildDirectory().resolve(projectName + ".exe"); //$NON-NLS-1$
 		case Platform.OS_LINUX:
-			return getBuildDirectory().resolve(projectName); //$NON-NLS-1$
+			return getBuildDirectory().resolve(projectName);
 		default:
 			Path releaseFolder = getBuildDirectory().resolve("release"); //$NON-NLS-1$
 			return releaseFolder.resolve(projectName);
@@ -344,7 +347,8 @@
 			try (ErrorParserManager epm = new ErrorParserManager(project, getBuildDirectoryURI(), this,
 					getToolChain().getErrorParserIds())) {
 				// run make
-				ProcessBuilder processBuilder = new ProcessBuilder(makeCommand.toString(), "all").directory(buildDir.toFile());
+				ProcessBuilder processBuilder = new ProcessBuilder(makeCommand.toString(), "all") //$NON-NLS-1$
+						.directory(buildDir.toFile());
 				setBuildEnvironment(processBuilder.environment());
 				Process process = processBuilder.start();
 				outStream.write(makeCommand.toString() + '\n');
