Создайте поддержку процессов для имен папок с пространствами или специальными символами

Имена папок с пространствами

В Windows® система, генератор кода отображает диск, соответствующий MATLAB® папка установки для любого из следующих условий:

  • The matlabroot папка является расположением UNC.

  • Путь к matlabroot папка содержит пространства, и система не имеет альтернативной поддержки имен.

Эти пути к папкам могут содержать пространства:

  • Путь к папке установки MATLAB (matlabroot). Для примера, C:\Program Files\MATLAB\R2015b

  • Путь к текущей рабочей папке, где вы запускаете сборку (pwd). Для примера, C:\Users\username\Documents\My Work.

  • Путь к папке установки компилятора, используемой процессом сборки.

Если ваше рабочее окружение включает один или несколько предыдущих сценариев, используйте следующие механизмы поддержки для процесса сборки:

  • Если вы используете подход набора инструментальных средств для создания сгенерированного кода, системная поддержка пространств в именах папок влияет на операцию набора инструментальных средств:

    • Для Linux® системы и системы Windows с поддержкой создания имен 8.3, набор инструментальных средств управляет пространствами в именах папок с помощью альтернативных имен из операционной системы. Набор инструментальных средств использует TransformPathsWithSpaces атрибут для управления этими именами.

      addAttribute(toolchainObject, 'TransformPathsWithSpaces', true);

      Разрешения безопасности дисков и папок могут определить, преобразует ли набор инструментальных средств путь. Например, если путь содержит папку с строением безопасности, которая запрещает 8,3 преобразования пути, набор инструментальных средств не преобразует путь, и процесс сборки выдает предупреждение.

    • Для систем Windows с отключенным созданием имен 8.3 набор инструментальных средств управляет пространствами в именах папок путем сопоставления сетевого диска с помощью пакетного файла (.bat). Эта операция требует добавления RequiresBatchFile атрибут к определению набора инструментальных средств.

      addAttribute(toolchainObject, 'RequiresBatchFile', true);

    При разработке набора инструментальных средств для системы Windows установите оба атрибута. Для получения дополнительной информации об атрибутах набора инструментальных средств смотрите addAttribute.

  • Если вы используете подход make-файла шаблона для создания сгенерированного кода, make-файл шаблона (.tmf) требует кода для управления пространствами в именах папок. Когда альтернативные имена папок (краткие имена Windows) отличаются от имен папок файловой системы (длинные имена Windows), добавьте этот код в make-файл.

    ALT_MATLAB_ROOT         = |>ALT_MATLAB_ROOT<|
    ALT_MATLAB_BIN          = |>ALT_MATLAB_BIN<|
    !if "$(MATLAB_ROOT)" != "$(ALT_MATLAB_ROOT)"
    MATLAB_ROOT = $(ALT_MATLAB_ROOT)
    !endif
    !if "$(MATLAB_BIN)" != "$(ALT_MATLAB_BIN)"
    MATLAB_BIN = $(ALT_MATLAB_BIN)
    !endif

    Когда значения лексем местоположения не равны, этот код заменяет MATLAB_ROOT с ALT_MATLAB_ROOT. Замена указывает, что путь к папке установки MATLAB содержит пространства. Этот код применяет тот же тип замены для MATLAB_BIN с ALT_MATLAB_BIN. Предыдущий код характерен для nmake. Для примеров для платформы смотрите поставляемые шаблоны make-файлов.

При любом подходе к сборке, когда возникает проблема с поддержкой создания альтернативных имен (кратких имен), в Windows могут возникнуть ошибки сборки. Если при построении генерируется сообщение об ошибке, аналогичное следующему сообщению, см. поиск и устранение проблем ошибок при наличии пространств в именах папок».

NMAKE : fatal error U1073: don't know how to make ' ...

При использовании команд операционной системы, таких как system или dos, заключают пути, которые задают исполняемые файлы или параметры команды в двойные кавычки (" "). Для примера:

system('dir "D:\Applications\Common Files"')

Эта таблица содержит сводные данные поддержки папок сборки и ограничений для Windows.

Создание папок процессовПодход к путям с UNC или пространствамиПоддержка Windows

matlabroot папка

The matlabroot значение определяется из места установки MATLAB.

Во время сборки, местоположение UNC, такое как:

\\networkdrive\matlab\R20xxb

можно изменить как:

T:\

Во время сборки на системе Windows с поддержкой краткого имени файла (8.3) (по умолчанию для Windows с использованием NTFS) процесс сборки использует Windows API getShortPathName() для расположения папки.

Во время сборки на системе Windows без поддержки краткого имени файла (8.3) (системы, использующие ReFS или использующие NTFS с отключенной поддержкой 8.3) расположение с пространствами в пути, например:

C:\Program Files\MATLAB\R20xxb

можно изменить как:

T:\R20xxb

Поддержка папки процесса сборки доступна независимо от файловой системы (NTFS или ReFS) или строения файловой системы для поддержки краткого имени файла.

Limitations:

В системах, которые требуют отображения дисков для места установки, процесс сборки требует, чтобы для отображения была доступна буква диска.

В системах без поддержки краткого имени файла (8.3) (с использованием ReFS или с использованием NTFS с отключенной поддержкой 8.3) последняя папка в расположении установки не может содержать пространства. Для примера, окончательное имя папки:

C:\Program Files\MATLAB\R20xxb sp1

не поддерживается.

Папка генерации кода

Папка кэша симуляции

Расположения исходных файлов пользовательского кода - среди прочих, эти расположения включают папки, заданные:

  • rtwmakecfg.m

  • Моделируйте параметры конфигурации Additional build information

  • Библиотека замещения кода

Для расположений UNC процесс сборки временно сопоставляет диск с помощью команд интерпретатора pushd и popd.

Поддержка папок процесса сборки доступна независимо от файла системы (NTFS или ReFS) или файл системных строений для поддержки кратких путей имен.

Для путей с пространствами процесс сборки использует имя краткого пути Windows (8.3) с помощью Windows API:

getShortPathName()

Поддержка папок процесса сборки зависит от файловой системы NTFS и требует поддержки Windows по умолчанию. Значение набора реестров 2 или 0 для:

NtfsDisable8dot3NameCreation

Limitations: Build не поддерживает пространства в пути к этим папкам для:

  • Файл система NTFS с поддержкой краткого пути имени отключён

  • Система файла ReFS (этот файл система не поддерживает краткие имена путей)

Имена папок со специальными символами

Если путь к папке, связанной со сборкой, содержит японский (многобайтовый) символ, где конечный байт равен 5C шестнадцатеричный символ, процесс сборки может привести к ошибке. Инструменты make и compiler могут неправильно интерпретировать конечный байт как '\' (backslash) символ.

Поиск и устранение проблем ошибок при наличии пространств в именах папок

В Windows, когда возникает проблема с поддержкой создания кратких имен файлов, могут возникнуть ошибки процесса сборки. Когда эта проблема влияет на сборку, появляется сообщение об ошибке, аналогичное:

NMAKE : fatal error U1073: don't know how to make 'C:\Work\My'

Это сообщение может возникнуть, если пространство в имени папки (C:\Work\My Models) препятствует процессу сборки найти модель или файл для сборки. Описание связанных со сборкой папок, которые чувствительны к пространству в имени или пути папки, смотрите в Имена папок с пространствами.

Чтобы избежать проблем с именами папок с пространствами, когда поддержка имен кратких файлов Windows отключена, не используйте пути с пространствами. Например, установите стороннее программное обеспечение в пути без пространств. Не используйте пути с пространствами для папок, содержащих ваши модели, исходные файлы или библиотеки.

Проблема может возникнуть со сборками, которые используют имена папок с пространствами, поскольку возможно отключить поддержку альтернативных имен Windows. Процесс сборки использует эту поддержку альтернативных имен в системах Windows. Существует много условий для поддержки альтернативных имен этого файла, папки и пути:

  • 8.3 имя

  • Путь DOS

  • краткое имя файла (SFN, ShortFileName)

  • псевдоним длинного имени

  • Псевдоним пути к Windows

Проверьте тип файла системы, которую использует диск. В проводнике Windows щелкните правой кнопкой мыши значок диска и выберите свойства.

  • Если файловая система является ReFS (Устойчивая файловая система), это проблема. ReFS не обеспечивает поддержку краткого имени файла. Кроме установочной папки MATLAB, процесс сборки не поддерживает имена папок с пространствами для файловой системы ReFS. Если ваше рабочее окружение требуется поддержка краткого имени файла для папки сборки или для дополнительных папок внешнего кода, не используйте ReFS.

  • Если файловая система является NTFS (New Technology File System), возможно, ошибка сборки связана с несовместимостью параметров реестра. Продолжите поиск и устранение проблем.

Ошибка может быть вызвана проблемой с поддержкой краткого имени файла в системе, использующей NTFS. Проверьте настройку реестра Windows, которая позволяет создавать краткие имена для файлов, папок и путей.

  1. Откройте командную строку Windows, работающую от имени администратора. Например, в меню Пуск Windows введите cmd, щелкните правой кнопкой мыши по cmd.exe значок и выберите Run as administrator.

  2. Измените на windows\system32 папка и запрос NtfsDisable8dot3NameCreation состояние путем ввода:

    > fsutil 8dot3name query
  3. Если состояние реестра NtfsDisable8dot3NameCreation не 2, значение по умолчанию (установка уровня тома), измените значение на 2 путем ввода:

    > fsutil 8dot3name set 2

    Для получения дополнительной информации о включении создания кратких имен. См. https://technet.microsoft.com/en-us/library/ff621566.aspx.

    Изменение параметра реестра позволяет создавать краткие имена только для файлов и папок, созданных после изменения.

  4. Чтобы создать краткие имена для файлов, созданных при отключении создания кратких имен, в командной строке Windows используйте fsutil утилита.

    Чтобы задать краткое имя, синтаксис:

    > fsutil file setshortname <FileName> <ShortName>

    Например, чтобы создать краткое имя PROGRA~1 для длинного имени C:\Program Files, тип:

    > fsutil file setshortname "C:\Program Files" PROGRA~1

    The C:\Program Files имя папки в кавычках, поскольку она имеет пространства.  

  5. Чтобы убедиться, что краткое имя было создано, используйте dir команда с /x опция для отображения кратких имен.

    > dir C:\ /x

См. также

Похожие темы

Внешние веб-сайты