Ошибка Cmake / MSBuild при подготовке проекта для Visual Studio, поскольку домашний путь пользователя содержит круглые скобки - PullRequest
1 голос
/ 05 октября 2019

Сводка

Ошибка 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.

Возможные решения

  • создал локальную учетную запись с обычным именем пользователя
    1. переместить все данные в новую учетную запись (я не верю, что все будет работать - все настройки, все программы)
    2. вустраните переключение между пользователями / учетными записями - запустите VS с помощью «Запуск от имени другого пользователя» (запуск от имени пользователя с обычным именем)

Есть ли какое-то другое решение, которое будет работать с оригинальнымучетная запись пользователя (с круглыми скобками в имени)?

Пример проекта

  • test.cpp
#include <iostream>

using namespace std;

int main(){
    cout << "Hello World!" << endl;
}
  • CMakeLists.txt
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...