From ec2f40eb14e9e6cc4595af9f3201e6e3bbe1de62 Mon Sep 17 00:00:00 2001 From: John Moule Date: Tue, 19 Dec 2023 23:59:09 +0000 Subject: [PATCH] Bug579242: allow user to override CMake Settings The Launch Bar Launch Configuration, Build Settings tab allows the user to customise the CMake Settings (CMake generator, extra arguments, build command and clean command). But changing these settings did not affect the CMake build. This is now fixed. A "Use these settings" checkbox allows the user to choose settings from the UI or use the operating system defaults. --- NewAndNoteworthy/CDT-11.5.md | 11 +++ ...ld_Settings_Use_these_settings_checked.PNG | Bin 0 -> 18370 bytes ..._Settings_Use_these_settings_unchecked.PNG | Bin 0 -> 20343 bytes TESTING.md | 8 ++ .../META-INF/MANIFEST.MF | 2 +- .../internal/CMakeBuildConfiguration.java | 59 +++++++++++++- .../internal/CommandDescriptorBuilder.java | 4 +- .../properties/AbstractOsOverrides.java | 3 +- .../cmake/core/properties/CMakeGenerator.java | 12 +++ .../META-INF/MANIFEST.MF | 2 +- .../cdt/cmake/ui/internal/CMakeBuildTab.java | 75 +++++++++++++++--- .../cdt/cmake/ui/internal/Messages.java | 2 + .../cdt/cmake/ui/internal/messages.properties | 2 + 13 files changed, 160 insertions(+), 20 deletions(-) create mode 100644 NewAndNoteworthy/images/CDT-11.5-Build_Settings_Use_these_settings_checked.PNG create mode 100644 NewAndNoteworthy/images/CDT-11.5-Build_Settings_Use_these_settings_unchecked.PNG diff --git a/NewAndNoteworthy/CDT-11.5.md b/NewAndNoteworthy/CDT-11.5.md index 97649b4ed86..de77eec2336 100644 --- a/NewAndNoteworthy/CDT-11.5.md +++ b/NewAndNoteworthy/CDT-11.5.md @@ -6,6 +6,17 @@ This is the New & Noteworthy page for CDT 11.5 which is part of Eclipse 2024-03 # Release Notes +# CMake +The Launch Bar Launch Configuration Build Settings tab has been updated so it can now correctly control the CMake Generator setting. The "Additional CMake arguments" field can also be used to inject CMake defines into the CMakeCache.txt file to populate it with customizable settings for the project. Use the new "Use these settings" checkbox to control whether to use either the operating system defaults or settings from the UI. + +When "Use these settings" checkbox is unchecked, the operating system defaults are used during the CMake build. + +

+ +When the "Use these settings" checkbox is checked, the UI settings are used during the CMake build. + +

+ # API Changes, current and planned diff --git a/NewAndNoteworthy/images/CDT-11.5-Build_Settings_Use_these_settings_checked.PNG b/NewAndNoteworthy/images/CDT-11.5-Build_Settings_Use_these_settings_checked.PNG new file mode 100644 index 0000000000000000000000000000000000000000..add5a814ec4c61d116a4f479b9732cc224defab6 GIT binary patch literal 18370 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 a%!{@b$E&CsoCOB-9xe9ky$_?0mHZ91M-12i literal 0 HcmV?d00001 diff --git a/TESTING.md b/TESTING.md index e9981712a8d..59d5a3add83 100644 --- a/TESTING.md +++ b/TESTING.md @@ -117,3 +117,11 @@ DISPLAY=:99 mvn verify or specify the `DISPLAY` in the Eclipse JUnit launch configuration: ![junit_env_display.png](images/junit_env_display.png "screenshot of how to set custom DISPLAY") + +## Manual Testing +### CMake Build Settings tab +A set of manual tests that check it is possible to control the CMake build using the Launch Bar Launch Configuration > Build Settings tab. + +[CMake Build Settings](https://github.com/eclipse-cdt/cdt/files/14087582/Bug579242_manual_tests.md) + + diff --git a/cmake/org.eclipse.cdt.cmake.core/META-INF/MANIFEST.MF b/cmake/org.eclipse.cdt.cmake.core/META-INF/MANIFEST.MF index 276fc467efd..5b71c64ffbf 100644 --- a/cmake/org.eclipse.cdt.cmake.core/META-INF/MANIFEST.MF +++ b/cmake/org.eclipse.cdt.cmake.core/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.cdt.cmake.core;singleton:=true -Bundle-Version: 1.5.400.qualifier +Bundle-Version: 1.5.500.qualifier Bundle-Activator: org.eclipse.cdt.cmake.core.internal.Activator Bundle-Vendor: %providerName Require-Bundle: org.eclipse.core.runtime, diff --git a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfiguration.java b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfiguration.java index 55eca78c4e8..02c5b7a0bbb 100644 --- a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfiguration.java +++ b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfiguration.java @@ -18,11 +18,13 @@ import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.function.Consumer; +import java.util.stream.Collectors; import org.eclipse.cdt.cmake.core.CMakeErrorParser; import org.eclipse.cdt.cmake.core.CMakeExecutionMarkerFactory; @@ -66,14 +68,19 @@ import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.jobs.Job; +import org.osgi.service.prefs.Preferences; public class CMakeBuildConfiguration extends CBuildConfiguration { + public static final String CMAKE_USE_UI_OVERRIDES = "cmake.use.ui.overrides"; //$NON-NLS-1$ + public static final boolean CMAKE_USE_UI_OVERRIDES_DEFAULT = false; public static final String CMAKE_GENERATOR = "cmake.generator"; //$NON-NLS-1$ public static final String CMAKE_ARGUMENTS = "cmake.arguments"; //$NON-NLS-1$ public static final String CMAKE_ENV = "cmake.environment"; //$NON-NLS-1$ public static final String BUILD_COMMAND = "cmake.command.build"; //$NON-NLS-1$ + public static final String BUILD_COMMAND_DEFAULT = "cmake"; //$NON-NLS-1$ public static final String CLEAN_COMMAND = "cmake.command.clean"; //$NON-NLS-1$ + public static final String CLEAN_COMMAND_DEFAULT = "clean"; //$NON-NLS-1$ private ICMakeToolChainFile toolChainFile; @@ -261,6 +268,23 @@ public IProject[] build(int kind, Map args, IConsole console, IP } } + /** + * When UI overrides are in force, gets the user specified clean target (if not blank), otherwise the default clean target. + * @return Always a non-null String indicating the clean target. + */ + private String getCleanCommand() { + String retVal = CLEAN_COMMAND_DEFAULT; + Preferences settings = this.getSettings(); + boolean useUiOverrides = settings.getBoolean(CMAKE_USE_UI_OVERRIDES, CMAKE_USE_UI_OVERRIDES_DEFAULT); + if (useUiOverrides) { + String cleanCommand = settings.get(CLEAN_COMMAND, CLEAN_COMMAND_DEFAULT); + if (!cleanCommand.isBlank()) { + retVal = cleanCommand; + } + } + return retVal; + } + @Override public void clean(IConsole console, IProgressMonitor monitor) throws CoreException { IProject project = getProject(); @@ -271,7 +295,7 @@ public void clean(IConsole console, IProgressMonitor monitor) throws CoreExcepti ICMakeProperties cmakeProperties = getPropertiesController().load(); CommandDescriptorBuilder cmdBuilder = new CommandDescriptorBuilder(cmakeProperties, new SimpleOsOverridesSelector()); - CommandDescriptor command = cmdBuilder.makeCMakeBuildCommandline("clean"); //$NON-NLS-1$ + CommandDescriptor command = cmdBuilder.makeCMakeBuildCommandline(getCleanCommand()); ConsoleOutputStream outStream = console.getOutputStream(); Path buildDir = getBuildDirectory(); @@ -547,7 +571,12 @@ public void shutdown() { } } // CMakeIndexerInfoConsumer - private static class SimpleOsOverridesSelector implements IOsOverridesSelector { + /** + * Supports OS overrides and also User Interface (UI) overrides, provided in the CMakeBuildTab. The UI + * overrides are stored in the intermediary CBuildConfiguration Preferences (CBuildConfiguration.getSettings()) + * and used only when CMAKE_USE_UI_OVERRIDES is true. + */ + private class SimpleOsOverridesSelector implements IOsOverridesSelector { @Override public IOsOverrides getOsOverrides(ICMakeProperties cmakeProperties) { @@ -561,7 +590,31 @@ public IOsOverrides getOsOverrides(ICMakeProperties cmakeProperties) { // fall back to linux, if OS is unknown overrides = cmakeProperties.getLinuxOverrides(); } - return overrides; + return getUiOrOsOverrides(overrides); + } + + private IOsOverrides getUiOrOsOverrides(IOsOverrides osOverrides) { + IOsOverrides retVal = Objects.requireNonNull(osOverrides, "osOverrides must not be null"); //$NON-NLS-1$ + Preferences settings = getSettings(); + boolean useUiOverrides = settings.getBoolean(CMAKE_USE_UI_OVERRIDES, CMAKE_USE_UI_OVERRIDES_DEFAULT); + if (useUiOverrides) { + // Set UI override for generator + String gen = settings.get(CMAKE_GENERATOR, ""); //$NON-NLS-1$ + retVal.setGenerator(CMakeGenerator.getGenerator(gen)); + // Set UI override for Extra Arguments + String extraArgsStr = settings.get(CMAKE_ARGUMENTS, ""); //$NON-NLS-1$ + // Convert String of args, separated by 1 or more spaces, into list of Strings + List extraArgs = Arrays.stream(extraArgsStr.split("\\s+")).map(entry -> entry.trim()) //$NON-NLS-1$ + .collect(Collectors.toList()); + retVal.setExtraArguments(extraArgs); + // Set UI override for cmake build command, unless it's the default + String buildCommand = settings.get(BUILD_COMMAND, BUILD_COMMAND_DEFAULT); + if (!buildCommand.isBlank() && !BUILD_COMMAND_DEFAULT.equals(buildCommand)) { + retVal.setUseDefaultCommand(false); + retVal.setCommand(buildCommand); + } + } + return retVal; } } // SimpleOsOverridesSelector } diff --git a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CommandDescriptorBuilder.java b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CommandDescriptorBuilder.java index 81702a28391..a0957a66df4 100644 --- a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CommandDescriptorBuilder.java +++ b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CommandDescriptorBuilder.java @@ -56,7 +56,7 @@ CommandDescriptor makeCMakeCommandline(Path toolChainFile) throws CoreException List env = new ArrayList<>(); // defaults for all OSes... - args.add("cmake"); //$NON-NLS-1$ + args.add(CMakeBuildConfiguration.BUILD_COMMAND_DEFAULT); /* add general settings */ if (cmakeProperties.isWarnNoDev()) args.add("-Wno-dev"); //$NON-NLS-1$ @@ -111,7 +111,7 @@ CommandDescriptor makeCMakeBuildCommandline(String buildscriptTarget) throws Cor IOsOverrides osOverrides = overridesSelector.getOsOverrides(cmakeProperties); if (osOverrides.getUseDefaultCommand()) { - args.add("cmake"); //$NON-NLS-1$ + args.add(CMakeBuildConfiguration.BUILD_COMMAND_DEFAULT); } else { IStringVariableManager varManager = VariablesPlugin.getDefault().getStringVariableManager(); String cmd = varManager.performStringSubstitution(osOverrides.getCommand()); diff --git a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/properties/AbstractOsOverrides.java b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/properties/AbstractOsOverrides.java index 4451ca6ad69..d2b644ce404 100644 --- a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/properties/AbstractOsOverrides.java +++ b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/properties/AbstractOsOverrides.java @@ -15,6 +15,7 @@ import java.util.List; import java.util.Objects; +import org.eclipse.cdt.cmake.core.internal.CMakeBuildConfiguration; import org.eclipse.cdt.cmake.core.properties.CMakeGenerator; import org.eclipse.cdt.cmake.core.properties.IOsOverrides; @@ -42,7 +43,7 @@ public AbstractOsOverrides() { * Sets each value to its default. */ public void reset() { - setCommand("cmake"); //$NON-NLS-1$ + setCommand(CMakeBuildConfiguration.BUILD_COMMAND_DEFAULT); useDefaultCommand = true; setGenerator(CMakeGenerator.UnixMakefiles); extraArguments.clear(); diff --git a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/properties/CMakeGenerator.java b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/properties/CMakeGenerator.java index 553cb0767d5..4ff5a2296c4 100644 --- a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/properties/CMakeGenerator.java +++ b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/properties/CMakeGenerator.java @@ -81,4 +81,16 @@ public String getMakefileName() { public String getIgnoreErrOption() { return ignoreErrOption; } + + /** + * @since 1.5 + */ + public static CMakeGenerator getGenerator(String generatorName) { + for (CMakeGenerator gen : values()) { + if (gen.getCMakeName().equals(generatorName)) { + return gen; + } + } + return null; + } } diff --git a/cmake/org.eclipse.cdt.cmake.ui/META-INF/MANIFEST.MF b/cmake/org.eclipse.cdt.cmake.ui/META-INF/MANIFEST.MF index e1aa576a785..a646de41f3f 100644 --- a/cmake/org.eclipse.cdt.cmake.ui/META-INF/MANIFEST.MF +++ b/cmake/org.eclipse.cdt.cmake.ui/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.cdt.cmake.ui;singleton:=true -Bundle-Version: 1.4.300.qualifier +Bundle-Version: 1.4.400.qualifier Bundle-Activator: org.eclipse.cdt.cmake.ui.internal.Activator Bundle-Vendor: %providerName Require-Bundle: org.eclipse.core.runtime, diff --git a/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/CMakeBuildTab.java b/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/CMakeBuildTab.java index 24636bb0a36..8d8b77064d2 100644 --- a/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/CMakeBuildTab.java +++ b/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/CMakeBuildTab.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.cdt.cmake.ui.internal; +import java.util.HashMap; import java.util.Map; import org.eclipse.cdt.cmake.core.internal.CMakeBuildConfiguration; @@ -32,11 +33,20 @@ public class CMakeBuildTab extends CommonBuildTab { + /** + * Checkbox allowing user to choose these settings over the default operating system defaults. + * This is connected to the CMakeBuildConfiguration.CMAKE_USE_UI_OVERRIDES preference. + */ + private Button useUiCmakeSettings; private Button unixGenButton; private Button ninjaGenButton; private Text cmakeArgsText; private Text buildCommandText; private Text cleanCommandText; + private Label generatorLabel; + private Label cmakeArgsLabel; + private Label buildCommandLabel; + private Label cleanCommandLabel; @Override protected String getBuildConfigProviderId() { @@ -57,8 +67,19 @@ public void createControl(Composite parent) { cmakeGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); cmakeGroup.setLayout(new GridLayout()); - Label label = new Label(cmakeGroup, SWT.NONE); - label.setText(Messages.CMakeBuildTab_Generator); + useUiCmakeSettings = new Button(cmakeGroup, SWT.CHECK); + useUiCmakeSettings.setText(Messages.CMakeBuildTab_useUICmakeSettings); + useUiCmakeSettings.setToolTipText(Messages.CMakeBuildTab_useUICmakeSettingsTip); + useUiCmakeSettings.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + updateEnablement(); + updateLaunchConfigurationDialog(); + } + }); + + generatorLabel = new Label(cmakeGroup, SWT.NONE); + generatorLabel.setText(Messages.CMakeBuildTab_Generator); Composite genComp = new Composite(cmakeGroup, SWT.BORDER); genComp.setLayout(new GridLayout(2, true)); @@ -81,31 +102,50 @@ public void widgetSelected(SelectionEvent e) { } }); - label = new Label(cmakeGroup, SWT.NONE); - label.setText(Messages.CMakeBuildTab_CMakeArgs); + cmakeArgsLabel = new Label(cmakeGroup, SWT.NONE); + cmakeArgsLabel.setText(Messages.CMakeBuildTab_CMakeArgs); cmakeArgsText = new Text(cmakeGroup, SWT.BORDER); cmakeArgsText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); cmakeArgsText.addModifyListener(e -> updateLaunchConfigurationDialog()); - label = new Label(cmakeGroup, SWT.NONE); - label.setText(Messages.CMakeBuildTab_BuildCommand); + buildCommandLabel = new Label(cmakeGroup, SWT.NONE); + buildCommandLabel.setText(Messages.CMakeBuildTab_BuildCommand); buildCommandText = new Text(cmakeGroup, SWT.BORDER); buildCommandText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); buildCommandText.addModifyListener(e -> updateLaunchConfigurationDialog()); - label = new Label(cmakeGroup, SWT.NONE); - label.setText(Messages.CMakeBuildTab_CleanCommand); + cleanCommandLabel = new Label(cmakeGroup, SWT.NONE); + cleanCommandLabel.setText(Messages.CMakeBuildTab_CleanCommand); cleanCommandText = new Text(cmakeGroup, SWT.BORDER); cleanCommandText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); cleanCommandText.addModifyListener(e -> updateLaunchConfigurationDialog()); } + /** + * Updates the enabled state of the CMake settings controls based on useUiCmakeSettings checkbox + */ + private void updateEnablement() { + boolean isSelected = useUiCmakeSettings.getSelection(); + generatorLabel.setEnabled(isSelected); + unixGenButton.setEnabled(isSelected); + ninjaGenButton.setEnabled(isSelected); + cmakeArgsLabel.setEnabled(isSelected); + cmakeArgsText.setEnabled(isSelected); + buildCommandLabel.setEnabled(isSelected); + buildCommandText.setEnabled(isSelected); + cleanCommandLabel.setEnabled(isSelected); + cleanCommandText.setEnabled(isSelected); + } + @Override public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { - // TODO + // Set defaults for Build Settings + ICBuildConfiguration buildConfig = getBuildConfiguration(); + buildConfig.setProperty(CMakeBuildConfiguration.CMAKE_USE_UI_OVERRIDES, + Boolean.toString(CMakeBuildConfiguration.CMAKE_USE_UI_OVERRIDES_DEFAULT)); } @Override @@ -133,10 +173,14 @@ public void initializeFrom(ILaunchConfiguration configuration) { String cleanCommand = buildConfig.getProperty(CMakeBuildConfiguration.CLEAN_COMMAND); if (cleanCommand != null) { - cleanCommandText.setText(buildCommand); + cleanCommandText.setText(cleanCommand); } else { cleanCommandText.setText(""); //$NON-NLS-1$ } + + boolean isSelected = Boolean.valueOf(buildConfig.getProperty(CMakeBuildConfiguration.CMAKE_USE_UI_OVERRIDES)); + useUiCmakeSettings.setSelection(isSelected); + updateEnablement(); } private void updateGeneratorButtons(String generator) { @@ -153,8 +197,8 @@ public void performApply(ILaunchConfigurationWorkingCopy configuration) { ICBuildConfiguration buildConfig = getBuildConfiguration(); - buildConfig.setProperty(CMakeBuildConfiguration.CMAKE_GENERATOR, - ninjaGenButton.getSelection() ? "Ninja" : "Unix Makefiles"); //$NON-NLS-1$ //$NON-NLS-2$ + String gen = ninjaGenButton.getSelection() ? "Ninja" : "Unix Makefiles"; //$NON-NLS-1$ //$NON-NLS-2$ + buildConfig.setProperty(CMakeBuildConfiguration.CMAKE_GENERATOR, gen); String cmakeArgs = cmakeArgsText.getText().trim(); if (!cmakeArgs.isEmpty()) { @@ -176,6 +220,13 @@ public void performApply(ILaunchConfigurationWorkingCopy configuration) { } else { buildConfig.removeProperty(CMakeBuildConfiguration.CLEAN_COMMAND); } + + boolean isSelected = useUiCmakeSettings.getSelection(); + buildConfig.setProperty(CMakeBuildConfiguration.CMAKE_USE_UI_OVERRIDES, Boolean.toString(isSelected)); + + Map saved = new HashMap<>(); + saved.put(CMakeBuildConfiguration.CMAKE_USE_UI_OVERRIDES, Boolean.toString(isSelected)); + getBuildConfiguration().setProperties(saved); } @Override diff --git a/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/Messages.java b/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/Messages.java index 5593767532a..deeb27c78e3 100644 --- a/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/Messages.java +++ b/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/Messages.java @@ -24,6 +24,8 @@ public class Messages extends NLS { public static String CMakeBuildTab_Settings; public static String CMakeBuildTab_Toolchain; public static String CMakeBuildTab_UnixMakefiles; + public static String CMakeBuildTab_useUICmakeSettings; + public static String CMakeBuildTab_useUICmakeSettingsTip; public static String CMakePreferencePage_Add; public static String CMakePreferencePage_ConfirmRemoveDesc; public static String CMakePreferencePage_ConfirmRemoveTitle; diff --git a/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/messages.properties b/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/messages.properties index c1588d15a4f..b13c7c24520 100644 --- a/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/messages.properties +++ b/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/messages.properties @@ -8,6 +8,8 @@ CMakeBuildTab_NoneAvailable=No Toolchains Available for this Target CMakeBuildTab_Settings=CMake Settings CMakeBuildTab_Toolchain=Toolchain CMakeBuildTab_UnixMakefiles=Unix Makefiles +CMakeBuildTab_useUICmakeSettings=Use these settings +CMakeBuildTab_useUICmakeSettingsTip=Use these settings instead of the operating system defaults CMakePreferencePage_Add=Add... CMakePreferencePage_ConfirmRemoveDesc=Do you wish to deregister the selected files? CMakePreferencePage_ConfirmRemoveTitle=Deregister CMake ToolChain File