Сводка
Ошибка Cmake / MSBuild при подготовке проекта для Visual Studio, поскольку домашний путь пользователя содержит круглые скобки
- полученная имя учетной записи пользователя (домен, созданный с помощью электронной почты), например PřijmeníJménoXXXXXX ( (исходная строка "PřijmeníJménoXXXXXX (12345)" обрезано до 20 символов)
- исходные и сборочные папки размещены вне C: \ Users \ PřijmeníJménoXXXXXX (
:VCEnd
'C:\Users\PřijmeníJménoXXXXXX' is not recognized as an internal or external command,
operable program or batch file.
- скобки в Program Files (x86) don 'Кажется, это проблема (вероятно)
- Почему / Что он пытается вызвать из папки пользователя?
Версии программного обеспечения: Visual Studio 19, Cmake 14 и 15, Windows 10Pro
Журнал Cmake:
PS G:\build> cmake ..\source_dir\
-- Building for: Visual Studio 16 2019
-- project source directory -> G:/source_dir
-- project build directory -> G:/build
CMake Error at CMakeLists.txt:31 (project):
Failed to run MSBuild command:
C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/MSBuild/Current/Bin/MSBuild.exe
to get the value of VCTargetsPath:
Microsoft (R) Build Engine version 16.1.76+g14b0a930a7 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 10/4/2019 9:14:12 PM.
Project "G:\build\CMakeFiles\3.14.5\VCTargetsPath.vcxproj" on node 1 (default targets).
PrepareForBuild:
Creating directory "x64\Debug\".
Creating directory "x64\Debug\VCTargetsPath.tlog\".
InitializeBuildStatus:
Creating "x64\Debug\VCTargetsPath.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
PostBuildEvent:
echo VCTargetsPath=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\
:VCEnd
'C:\Users\PřijmeníJménoXXXXXX' is not recognized as an internal or external command,
operable program or batch file.
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(138,5): error MSB3073: The command "echo VCTargetsPath=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\ [G:\build\CMakeFiles\3.14.5\VCTargetsPath.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(138,5): error MSB3073: :VCEnd" exited with code 1. [G:\build\CMakeFiles\3.14.5\VCTargetsPath.vcxproj]
Done Building Project "G:\build\CMakeFiles\3.14.5\VCTargetsPath.vcxproj" (default targets) -- FAILED.
Build FAILED.
"G:\build\CMakeFiles\3.14.5\VCTargetsPath.vcxproj" (default target) (1) ->
(PostBuildEvent target) ->
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(138,5): error MSB3073: The command "echo VCTargetsPath=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\ [G:\build\CMakeFiles\3.14.5\VCTargetsPath.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(138,5): error MSB3073: :VCEnd" exited with code 1. [G:\build\CMakeFiles\3.14.5\VCTargetsPath.vcxproj]
0 Warning(s)
1 Error(s)
Time Elapsed 00:00:00.32
Exit code: 1
-- Configuring incomplete, errors occurred!
Пробовал
Я пытался:
- запустить VS от имени администратора
- понять / изменить MSBuild \ Microsoft.CppCommon.targets (138, 5) - это у меня над головой
- создать проект VS в домашней папке пользователя. Вызов файла test.vcxproj с помощью команды «MSBuild.exe test.vcxproj» - все работает.
- Сравните файл vcxproj, созданный Cmake и VS.
Возможные решения
- создал локальную учетную запись с обычным именем пользователя
- переместить все данные в новую учетную запись (я не верю, что все будет работать - все настройки, все программы)
- вустраните переключение между пользователями / учетными записями - запустите VS с помощью «Запуск от имени другого пользователя» (запуск от имени пользователя с обычным именем)
Есть ли какое-то другое решение, которое будет работать с оригинальнымучетная запись пользователя (с круглыми скобками в имени)?
Пример проекта
#include <iostream>
using namespace std;
int main(){
cout << "Hello World!" << endl;
}
cmake_minimum_required(VERSION 3.10.0 FATAL_ERROR)
project(hello CXX)
add_executable(hello test.cpp)
- в той же папке, что и файлы, я создаю каталог с именем build
cd build; cmake ..
=> та же ошибка - сгенерированная сборка \ CMakeFiles\ 3.14.5 \ VCTargetsPath.vcxproj
<?xml version="1.0" encoding="UTF-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{F3FC6D86-508D-3FB1-96D2-995F08B142EC}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<Platform>x64</Platform>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props"/>
<PropertyGroup>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>
<PropertyGroup Label="Configuration">
<ConfigurationType>Utility</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props"/>
<ItemDefinitionGroup>
<PostBuildEvent>
<Command>echo VCTargetsPath=$(VCTargetsPath)</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets"/>
</Project>
- , можно вызвать MSBuild dчтобы получить ту же ошибку, что и, например,
"C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/MSBuild/Current/Bin/MSBuild.exe" build\CMakeFiles\3.14.5\VCTargetsPath.vcxproj