check binaryDir without resolving it (#3005)
This commit is contained in:
Родитель
1a10fd03b1
Коммит
e2a2d4c76c
|
@ -214,28 +214,26 @@ export class ProjectController implements vscode.Disposable {
|
||||||
for (const source of sourceDirectories) {
|
for (const source of sourceDirectories) {
|
||||||
projects.push(await CMakeProject.create(workspaceContext, source, isMultiProjectFolder));
|
projects.push(await CMakeProject.create(workspaceContext, source, isMultiProjectFolder));
|
||||||
}
|
}
|
||||||
await ProjectController.checkBuildDirectories(projects, sourceDirectories);
|
await ProjectController.checkBuildDirectories(workspaceContext.config, workspaceContext.folder);
|
||||||
return projects;
|
return projects;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static duplicateMessageShown = false;
|
private static duplicateMessageShown = false;
|
||||||
private static async checkBuildDirectories(projects: CMakeProject[], sourceDirectories: string[]) {
|
private static async checkBuildDirectories(config: ConfigurationReader, workspaceFolder: vscode.WorkspaceFolder) {
|
||||||
|
const sourceDirectories: string[] = config.sourceDirectory;
|
||||||
if (sourceDirectories.length <= 1) {
|
if (sourceDirectories.length <= 1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const buildDirectories: string[] = [];
|
const unresolvedBuildDirectory: string = config.buildDirectory(sourceDirectories.length > 1);
|
||||||
for (const project of projects) {
|
|
||||||
const buildDirectory = await project.binaryDir;
|
if (unresolvedBuildDirectory.includes("${sourceDirectory}") || unresolvedBuildDirectory.includes("${sourceDir}")) {
|
||||||
if (buildDirectories.indexOf(buildDirectory) < 0) {
|
return;
|
||||||
buildDirectories.push(buildDirectory);
|
} else {
|
||||||
}
|
|
||||||
}
|
|
||||||
if (buildDirectories.length < projects.length) {
|
|
||||||
const sameBinaryDir = localize('duplicate.build.directory.1', 'Multiple CMake projects in this folder are using the same CMAKE_BINARY_DIR.');
|
const sameBinaryDir = localize('duplicate.build.directory.1', 'Multiple CMake projects in this folder are using the same CMAKE_BINARY_DIR.');
|
||||||
const mayCauseProblems = localize('duplicate.build.directory.2', 'This may cause problems when attempting to configure your projects.');
|
const mayCauseProblems = localize('duplicate.build.directory.2', 'This may cause problems when attempting to configure your projects.');
|
||||||
log.warning(sameBinaryDir);
|
log.warning(sameBinaryDir);
|
||||||
log.warning(mayCauseProblems);
|
log.warning(mayCauseProblems);
|
||||||
log.warning(localize('duplicate.build.directory.3', 'Folder: {0}', projects[0].workspaceFolder.uri.fsPath));
|
log.warning(localize('duplicate.build.directory.3', 'Folder: {0}', workspaceFolder.uri.fsPath));
|
||||||
log.warning(localize('duplicate.build.directory.4', 'Consider using substitution variables in {0} such as {1}.', "'cmake.buildDirectory'", "'${sourceDirectory}'"));
|
log.warning(localize('duplicate.build.directory.4', 'Consider using substitution variables in {0} such as {1}.', "'cmake.buildDirectory'", "'${sourceDirectory}'"));
|
||||||
log.warning(localize('duplicate.build.directory.5', 'More information can be found at: https://aka.ms/cmaketoolsvariables'));
|
log.warning(localize('duplicate.build.directory.5', 'More information can be found at: https://aka.ms/cmaketoolsvariables'));
|
||||||
const moreInfo = localize('more.info', 'More info');
|
const moreInfo = localize('more.info', 'More info');
|
||||||
|
@ -279,8 +277,8 @@ export class ProjectController implements vscode.Disposable {
|
||||||
const config: ConfigurationReader | undefined = workspaceContext.config;
|
const config: ConfigurationReader | undefined = workspaceContext.config;
|
||||||
if (config) {
|
if (config) {
|
||||||
this.sourceDirectorySub.set(folder, config.onChange('sourceDirectory', async (sourceDirectories: string | string[]) => this.doSourceDirectoryChange(folder, sourceDirectories)));
|
this.sourceDirectorySub.set(folder, config.onChange('sourceDirectory', async (sourceDirectories: string | string[]) => this.doSourceDirectoryChange(folder, sourceDirectories)));
|
||||||
this.buildDirectorySub.set(folder, config.onChange('buildDirectory', async () => this.refreshDriverSettings(folder, config.sourceDirectory)));
|
this.buildDirectorySub.set(folder, config.onChange('buildDirectory', async () => this.refreshDriverSettings(config, folder)));
|
||||||
this.installPrefixSub.set(folder, config.onChange('installPrefix', async () => this.refreshDriverSettings(folder, config.sourceDirectory)));
|
this.installPrefixSub.set(folder, config.onChange('installPrefix', async () => this.refreshDriverSettings(config, folder)));
|
||||||
this.useCMakePresetsSub.set(folder, config.onChange('useCMakePresets', async (useCMakePresets: string) => this.doUseCMakePresetsChange(folder, useCMakePresets)));
|
this.useCMakePresetsSub.set(folder, config.onChange('useCMakePresets', async (useCMakePresets: string) => this.doUseCMakePresetsChange(folder, useCMakePresets)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -364,7 +362,7 @@ export class ProjectController implements vscode.Disposable {
|
||||||
}
|
}
|
||||||
projects.push(cmakeProject);
|
projects.push(cmakeProject);
|
||||||
}
|
}
|
||||||
await ProjectController.checkBuildDirectories(projects, sourceDirectories);
|
await ProjectController.checkBuildDirectories(workspaceContext.config, folder);
|
||||||
|
|
||||||
if (activeProjectPath !== undefined) {
|
if (activeProjectPath !== undefined) {
|
||||||
// Active project is no longer available. Pick a different one.
|
// Active project is no longer available. Pick a different one.
|
||||||
|
@ -382,14 +380,14 @@ export class ProjectController implements vscode.Disposable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async refreshDriverSettings(folder: vscode.WorkspaceFolder, sourceDirectories: string[]) {
|
private async refreshDriverSettings(config: ConfigurationReader, folder: vscode.WorkspaceFolder) {
|
||||||
const projects: CMakeProject[] | undefined = this.getProjectsForWorkspaceFolder(folder);
|
const projects: CMakeProject[] | undefined = this.getProjectsForWorkspaceFolder(folder);
|
||||||
if (projects) {
|
if (projects) {
|
||||||
for (const project of projects) {
|
for (const project of projects) {
|
||||||
const driver = await project.getCMakeDriverInstance();
|
const driver = await project.getCMakeDriverInstance();
|
||||||
await driver?.refreshSettings();
|
await driver?.refreshSettings();
|
||||||
}
|
}
|
||||||
await ProjectController.checkBuildDirectories(projects, sourceDirectories);
|
await ProjectController.checkBuildDirectories(config, folder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче