ファイル名とフォルダー名のビルド プロセス サポート
スペースを含むファイル名
ToolchainInfo
オブジェクトを使用するビルド プロセスでは、以下のツールチェーンのみが、スペースを含むファイル名の使用をサポートしています。
GNU gcc/g++ | gmake (64-bit Linux)
(Linux® 上)MinGW64 | gmake (64-bit Windows)
(Windows® 上)Xcode with Clang | gmake (64-bit Mac)
(Mac 上)
テンプレート makefile を使用するビルド プロセスでは、スペースを含むファイル名の使用がサポートされていません。
スペース含むフォルダー名
Windows システムでは、コード ジェネレーターは次のいずれかの場合に MATLAB® インストール フォルダーに対応するドライブをマッピングします。
matlabroot
フォルダーが UNC の場所である。matlabroot
フォルダーのパスにスペースが含まれており、システムが代替名をサポートしていない。
これらのフォルダーのパスにはスペースが含まれている場合があります。
MATLAB インストール フォルダー (
matlabroot
) のパス。例:C:\Program Files\MATLAB\R2015b
ビルドを開始する現在の作業フォルダー (
pwd
)。例:C:\Users\username\Documents\My Work
。ビルド プロセスが使用するコンパイラのインストール フォルダーのパス。
作業環境が上記のシナリオの 1 つ以上を含む場合は、ビルド プロセスで以下のサポート機構を使用します。
ツールチェーン アプローチを使用して生成コードをビルドしている場合、フォルダー名のスペースのシステム サポートは次のようなツールチェーンの動作に影響を及ぼします。
8.3 の名前作成に対応する Linux システムおよび Windows システムの場合、ツールチェーンはプラットフォームの代替名を使用してフォルダー名のスペースを管理します。ツールチェーンは
TransformPathsWithSpaces
属性を使用してこれらの名前を管理します。addAttribute(toolchainObject, 'TransformPathsWithSpaces', true);
ドライブとフォルダーのセキュリティ権限によって、ツールチェーンでパスが変換されるかどうかを判断できます。たとえば、8.3 のパス変換を禁止するセキュリティ構成をもつフォルダーがパスに含まれている場合、ツールチェーンではパスは変換されず、ビルド プロセスによって警告が生成されます。
8.3 の名前作成に対応していない Windows システムの場合、ツールチェーンはバッチ ファイル (.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
に固有です。プラットフォーム固有の例については、提供されているテンプレート makefile を参照してください。
いずれのビルド アプローチでも、別名 (省略名) の作成のサポートに問題がある場合には、Windows 上でビルド エラーが発生する可能性があります。ビルドによって次のようなエラー メッセージが発生する場合は、フォルダー名にスペースが含まれているときのエラーのトラブルシューティングを参照してください。
NMAKE : fatal error U1073: don't know how to make ' ...
system
や dos
のようなオペレーティング システムのコマンドを使用するときは、実行可能ファイルを指定するパスやコマンド パラメーターを二重引用符 (" "
) で囲んでください。次に例を示します。
system('dir "D:\Applications\Common Files"')
次の表に、Windows でのビルド フォルダーのサポートと制限の概要を示します。
ビルド プロセスのフォルダー | UNC またはスペースを含むパスへのアプローチ | Windows でのサポート |
---|---|---|
| ビルド中に UNC の場所が、
次のように再マッピングされる可能性もあります。
省略ファイル名 (8.3) をサポートする Windows システム (NTFS を使用する Windows の既定の設定) でのビルド中に、ビルド プロセスではフォルダーの場所に Windows API 省略ファイル名 (8.3) をサポートしない Windows システム (ReFS を使用するシステムまたは 8.3 のサポートを無効にした NTFS を使用するシステム) でのビルド中に、次のようなパスにスペースが含まれる場所は、
次のように再マッピングされる可能性もあります。
| ファイル システム (NTFS または ReFS) または省略ファイル名をサポートするためのファイル システム構成とは無関係にビルド プロセス フォルダーのサポートを利用できます。 制限: インストールの場所のドライブ マッピングが必要なシステムでは、マッピングのためのドライブ文字が使用可能である必要があります。 省略ファイル名 (8.3) をサポートしないシステム (ReFS を使用するか 8.3 のサポートを無効にした NTFS を使用する) では、インストール場所の最終的なフォルダーにスペースを含めることはできません。たとえば、最終的なフォルダー名
はサポートされません。 |
コード生成フォルダー シミュレーション キャッシュ フォルダー カスタム コードのソース ファイルの場所—他と同様にこれらの場所には以下で指定されるフォルダーが含まれます。
| UNC の場所については、シェル コマンド | ファイル システム (NTFS または ReFS) または短いパス名をサポートするためのファイル システム構成とは無関係にビルド プロセス フォルダーのサポートを利用できます。 |
スペースを含むパスについては、次の Windows API を使用して Windows の短いパス名 (8.3) をビルド プロセスで使用します。
| ビルド プロセス フォルダーのサポートは NTFS ファイル システムに依存し、Windows の既定のサポートを必要とします。レジストリで次の値を 2 または 0 に設定します。
制限:次の場合、ビルド プロセスではフォルダーへのパスに含まれるスペースはサポートされません。
|
フォルダー名にスペースが含まれているときのエラーのトラブルシューティング
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 (Resilient File System) の場合、問題があります。ReFS は省略ファイル名をサポートしていません。MATLAB インストール フォルダーを除いて、ビルド プロセスでは ReFS ファイル システムのスペースを含むフォルダー名をサポートしません。ご利用の作業環境で、ビルド フォルダーまたは追加の外部コード フォルダーでの省略ファイル名のサポートを必要とする場合は、ReFS を使用しないでください。
ファイル システムが NTFS (New Technology File System) の場合、ビルド エラーはレジストリ設定の非互換に関係している可能性があります。トラブルシューティングの手順を続けてください。
エラーは、NTFS を使用するシステムでの省略ファイル名のサポートの問題に起因する可能性があります。ファイル、フォルダーおよびパスの省略名の作成を有効にする Windows レジストリ設定を確認します。
管理者として実行している Windows コマンド プロンプトを開きます。たとえば、Windows の [スタート] メニューで
cmd
と入力し、cmd.exe
アイコンを右クリックして[管理者として実行]
を選択します。windows\system32
フォルダーに変更し、次のように入力してNtfsDisable8dot3NameCreation
のステータスをクエリします。> fsutil 8dot3name query
NtfsDisable8dot3NameCreation
のレジストリの状態が 0 (システムのすべてのボリュームに対して8dot3
名の作成を有効化) でない場合、次のように入力して値を 0 に変更します。> fsutil 8dot3name set 0
省略名の作成を有効にする方法の詳細については、https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/ff621566(v=ws.11)を参照してください。
このレジストリ設定の変更は、変更後に作成されたファイルとフォルダーの省略名の作成のみを有効にします。
省略名の作成が無効だった間に作成されたファイルに省略名を作成するには、Windows のコマンド ラインで
fsutil
ユーティリティを使用します。省略名を設定する構文は次のとおりです。
> fsutil file setshortname <FileName> <ShortName>
たとえば、完全名
C:\Program Files
に対して省略名PROGRA~1
を作成するには、次を入力します。> fsutil file setshortname "C:\Program Files" PROGRA~1
フォルダー名
C:\Program Files
にはスペースがあるため引用符で囲っています。省略名が作成されたことを確認するには、
dir
コマンドを/x
オプションと共に使用して省略名を表示します。> dir C:\ /x
特殊文字を含むフォルダー名
ビルドに関連するフォルダーのパスに以下が含まれている場合、ビルド プロセスはエラーとなる可能性があります。
システム ロケールに属さない Unicode® 文字。この制限は、ビルド プロセスで Microsoft® Visual C++® コンパイラを使用する場合には適用されません。
最後のバイトが 16 進数文字
5C
に等しい日本語 (マルチバイト) 文字。make およびコンパイラ ツールが最後のバイトを誤って'\'
(バックスラッシュ) 文字に解釈する可能性があります。1 つ以上の次の文字:
'&'
(アンパサンド)':'
(コロン)';'
(セミコロン)'$'
(ドル記号)'('
(開き小かっこ)')'
(閉じ小かっこ)'^'
(曲折アクセント)
非常に長いフォルダー パス
MinGW® コンパイラでは、コマンド ラインの長さが Windows の制限 (32,767 文字) を超えると、ビルド プロセスによってエラーが生成されます。このエラーが発生した場合は、インクルード パスの長さをチェックします。より短い名前のコード生成フォルダーに生成コードをビルドすることにより、コマンド ラインの長さを削減できます。
参考
関連するトピック
外部の Web サイト
- https://www.mathworks.com/matlabcentral/answers/95399-why-is-the-build-process-failing-with-error-code-nmake-fatal-error-u1073-don-t-know-how-to-make
- https://learn.microsoft.com/previous-versions/windows/it-pro/windows-2000-server/cc959352(v=technet.10)
- https://learn.microsoft.com/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/ff621566(v=ws.11)