В системе Windows ® генератор кода сопоставляет диск, соответствующий папке установки MATLAB ®, с одним из следующих условий:
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.
Если для построения сгенерированного кода используется подход makefile шаблона, makefile шаблона (.tmf) требует кода для управления пробелами в именах папок. Если имена альтернативных папок (краткие имена Windows) отличаются от имен папок файловой системы (длинные имена Windows), добавьте этот код в makefile.
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. Примеры, относящиеся к конкретной платформе, см. в поставляемых файлах создания шаблонов.
При любом подходе построения, когда возникает проблема с поддержкой создания альтернативных имен (коротких имен), в Windows могут возникать ошибки построения. Если сборка генерирует сообщение об ошибке, подобное следующему, см. раздел Устранение ошибок при наличии пробелов в именах папок.
NMAKE : fatal error U1073: don't know how to make ' ...При использовании команд операционной системы, таких как system или dos, заключите пути, определяющие исполняемые файлы или параметры команд в двойные кавычки (" "). Например:
system('dir "D:\Applications\Common Files"')В этой таблице приводится сводная информация о поддержке папок сборки и ограничениях для Windows.
| Папки процесса построения | Подход для путей с UNC или пространствами | Поддержка Windows |
|---|---|---|
| Во время построения расположение UNC, например:
может быть перекомпонован как: Во время сборки в системе Windows с поддержкой короткого имени файла (8.3) (по умолчанию для Windows с использованием NTFS) процесс сборки использует Windows API Во время сборки системы Windows без поддержки короткого имени файла (8.3) (системы с использованием ReFS или NTFS с поддержкой 8.3 отключены) расположение с пробелами в пути, например:
может быть перекомпонован как: | Поддержка папок процессов, доступных независимо от файловой системы (NTFS или ReFS) или конфигурации файловой системы для поддержки коротких имен файлов. Ограничения: В системах, которым требуется сопоставление дисков для расположения установки, процесс сборки требует, чтобы для сопоставления была доступна буква диска. В системах без поддержки короткого имени файла (8.3) (с использованием ReFS или NTFS с отключенной поддержкой 8.3) конечная папка в папке установки не может содержать пробелов. Например, окончательное имя папки:
не поддерживается. |
Папка создания кода Папка кэша моделирования Расположения исходных файлов пользовательского кода - среди прочих, эти расположения включают папки, указанные в:
| Для расположений UNC процесс сборки временно сопоставляет диск с помощью команд оболочки | Поддержка папок процесса построения доступна независимо от конфигурации файловой системы (NTFS или ReFS) или файловой системы для поддержки имени короткого пути. |
Для путей с пробелами в процессе построения используется короткий путь Windows (8.3) с помощью Windows API: | Поддержка папок процесса сборки зависит от файловой системы NTFS и требует поддержки Windows по умолчанию. Реестр устанавливает значение 2 или 0 для: Ограничения: процесс построения не поддерживает пробелы в пути к этим папкам для:
|
Если путь к папке, связанной со сборкой, содержит японский (многобайтовый) символ, где последний байт равен 5C шестнадцатеричный символ, процесс построения может привести к ошибке. Инструменты make и compiler могут неверно интерпретировать последний байт как '\' (обратная косая черта).
В 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, который позволяет создавать короткие имена для файлов, папок и путей.
Откройте командную строку Windows от имени администратора. Например, в меню Пуск Windows введите cmd, щелкните правой кнопкой мыши cmd.exe и выберите Run as administrator.
Изменение на windows\system32 папку и запрос NtfsDisable8dot3NameCreation состояние путем ввода:
> fsutil 8dot3name query
Если состояние реестра NtfsDisable8dot3NameCreation не равно 2, значение по умолчанию (настройка уровня громкости), измените значение на 2 путем ввода:
> fsutil 8dot3name set 2
Дополнительные сведения о включении создания коротких имен. См. https://technet.microsoft.com/en-us/library/ff621566.aspx.
Изменение параметра реестра позволяет создавать короткие имена только для файлов и папок, созданных после изменения.
Чтобы создать короткие имена для файлов, созданных во время отключения создания коротких имен, в командной строке Windows используйте fsutil утилита.
Для установки короткого имени используется следующий синтаксис:
> fsutil file setshortname <FileName> <ShortName>
Например, для создания краткого имени PROGRA~1 для длинного имени C:\Program Files, введите:
> fsutil file setshortname "C:\Program Files" PROGRA~1
C:\Program Files имя папки содержится в предложениях, поскольку в ней имеются пробелы.
Чтобы убедиться, что короткое имя создано, используйте dir команда с /x для отображения коротких имен.
> dir C:\ /x