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 c7ea5cdacaf..1b7fec99f3d 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 class CMakeBuildConfiguration extends CBuildConfiguration { } 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 @@ public class CMakeBuildConfiguration extends CBuildConfiguration { 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 6478a621260..4fe7a6d5bef 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 class CMakeBuildConfigurationProvider implements ICBuildConfigurationProv 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 @@ public class CMakeBuildConfigurationProvider implements ICBuildConfigurationProv 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 @@ public class CMakeBuildConfigurationProvider implements ICBuildConfigurationProv // 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 53adab3ce6a..ff4d69aad60 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 @@ public abstract class CBuildConfiguration extends PlatformObject 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 DEFAULT_COMMAND = new ArrayList<>(0); private final String name; private final IBuildConfiguration config; private final IToolChain toolChain; + private String launchMode; private final Map> scannerInfoListeners = new HashMap<>(); private ScannerInfoCache scannerInfoCache; @@ -127,12 +129,23 @@ public abstract class CBuildConfiguration extends PlatformObject } } 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 @@ public abstract class CBuildConfiguration extends PlatformObject 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 d2bd857627e..3236ea2af0e 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 @@ public class QtBuildConfiguration extends CBuildConfiguration 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 properties; @@ -89,15 +88,23 @@ public class QtBuildConfiguration extends CBuildConfiguration 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); @@ -135,11 +142,6 @@ public class QtBuildConfiguration extends CBuildConfiguration } } - @Override - public String getLaunchMode() { - return launchMode; - } - @Override public Path getQmakeCommand() { return getQtInstall().getQmakePath(); @@ -147,6 +149,7 @@ public class QtBuildConfiguration extends CBuildConfiguration @Override public String[] getQmakeConfig() { + String launchMode = getLaunchMode(); if (launchMode != null) { switch (launchMode) { case "run": //$NON-NLS-1$ @@ -185,7 +188,7 @@ public class QtBuildConfiguration extends CBuildConfiguration 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 @@ public class QtBuildConfiguration extends CBuildConfiguration 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');