ファイル名とフォルダー名のビルド プロセス サポート
スペースを含むファイル名
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 システム上のファイル、フォルダー、およびパスに対して別名サポートが使用されます。別名サポートには、次のような多くの用語が使われています。
8.3 名
DOS パス
省略ファイル名 (SFN、ShortFileName)
完全名のエイリアス
Windows パス エイリアス
Windows の別名サポートは無効にできるため、スペースを含むフォルダー名を使用するビルドで問題が発生する可能性があります。
ドライブに使用されているファイル システムの種類を確認します。Windows エクスプローラーでドライブのアイコンを右クリックして [プロパティ] を選択します。
ファイル、フォルダーおよびパスの省略名の作成を有効にする Windows レジストリ設定を管理するには、次のようにします。
管理者として実行している Windows コマンド プロンプトを開きます。たとえば、Windows の [スタート] メニューで
cmdと入力し、cmd.exeアイコンを右クリックして[管理者として実行]を選択します。Windows\System32フォルダーに移動し、次のように入力してNtfsDisable8dot3NameCreationのステータスをクエリします。fsutil 8dot3name query
レジストリの状態は次のいずれかの値になります。
0 — システム上のすべてのボリュームで
8dot3名の作成が有効です。1 — システム上のすべてのボリュームで
8dot3名の作成が無効です。2 — ボリュームごとに
8dot3名の作成を設定できます。3 — システム ボリュームを除くすべてのボリュームで
8dot3名の作成が無効です。
NtfsDisable8dot3NameCreationのレジストリ状態が 2 であると仮定します。特定のドライブ (Dなど) に対して8dot3名の作成を有効にするには、次のように入力します。fsutil 8dot3name set D: 0
その後、コンピューターを再起動します。このレジストリ設定の変更は、変更後に作成されたファイルとフォルダーの省略名の作成のみを有効にします。
省略名の作成を有効にする方法の詳細については、https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/fsutil-8dot3nameを参照してください。
省略名の作成が無効な状態で以前に作成されたファイルに省略名を作成するには、次のコマンドを使用します。
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)