makefile: *** target pattern contains no `%'. Stop. を解決する
- 公開:
- 更新:
- dev
make を使って docker-compose コマンドを実行しようとしたときにちょっとはまったので記事にします。
特に、筆者のような VSCode ユーザーは初見でつまづきやすいポイントかと思います。
結論
- tab ではなく space でインデントを行っていたのが原因
- VSCode の設定を変更する必要がある
Makefile
migration-create:
docker container exec -it todos_backend sh -c "npm run typeorm:migration:create $(name)"
migration-generate:
docker container exec -it todos_backend sh -c "npm run typeorm:migration:generate $(name)"
migration-run:
docker container exec -it todos_backend sh -c "npm run typeorm:migration:run"
migration-revert:
docker container exec -it todos_backend sh -c "npm run typeorm:migration:revert"
schema-drop:
docker container exec -it todos_backend sh -c "npm run typeorm:schema :drop"
schema-sync:
docker container exec -it todos_backend sh -c "npm run typeorm:schema:drop && npm run typeorm:migration:run && npm run typeorm:seed:run"
今回触っていた Makefile です。内容は以下のすばらしいハンズオンより。
Nest.js+MySQL で動く CRUD+認証 API サーバを Docker+VSCode+Swagger で構築してみる
エラー内容について
% make migration-generate name=CreateBaseTables
makefile:2: *** target pattern contains no `%'. Stop.
target に%
が含まれていないよ、という旨のエラーメッセージですが、ここでは直接的には関係ありません。
問題は、2 行目のインデントが、tab ではなく space で行われている点です。
VSCode では、デフォルトで tab が space に変換される設定になっており、Tab キーを押したとしても実際に入力されるのは space です。
解決方法
VSCode の Language Specific Settings を使います。
VSCode の settings.json を開き、以下の内容を追記します。
{
"[makefile]": {
"editor.insertSpaces": false,
"editor.detectIndentation": false
}
}
insertSpaces
は、tab キーを押したときに space が入力される設定。
detectIndentation
は、ファイルごとに既存のコードのインデントを検出し、それに合わせて space/tab の切り替えやインデントの大きさの調整を行ってくれる設定。
makefile ではこれらの設定を off にすることで、tab キーを押したときにちゃんと tab が入力されるようになります。
余談
VSCode の settings でeditor.renderWhitespace
を有効化していると、tab と space が可視化されるので気づきやすくなります。
↑ space
![tab](/posts/20230605/tab.png)
参考記事
- GNU make
- Why does Visual Studio Code insert spaces when editing a Makefile and “editor.insertSpaces”: “auto”?
- Visual Studio Code User and Workspace Settings - Language specific editor settings
- VSCode の Detect Indentation が、よくわからないので、調査してみた
- VSCode | タブキーを押したときにスペースに変換するのかに関する設定
お気づきの点があれば、 twitter のDMでご連絡ください。
![](/posts/20230605/make.jpeg)