Makefile 内で docker を使っていたら以下のような問題に遭遇したため対応方法をここにメモします。
(一つ上のディレクトリをマウントさせたかったのですが...相対パスの指定はだめとのこと...)
docker: Error response from daemon: create ./../sample: "./../sample" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path. See 'docker run --help'.
realpath
realpath コマンドは、相対パスを絶対パスに変換するコマンドです。
使い方
[.] や [..] やシンボリックリンクを展開し、相対パスを絶対パスに置換することが可能です。
NAME
realpath - print the resolved path
SYNOPSIS
realpath [OPTION]... FILE...
DESCRIPTION
Print the resolved absolute file name; all but the last component must exist
-e, --canonicalize-existing
all components of the path must exist
-m, --canonicalize-missing
no path components need exist or be a directory
-L, --logical
resolve '..' components before symlinks
-P, --physical
resolve symlinks as encountered (default)
-q, --quiet
suppress most error messages
--relative-to=DIR
print the resolved path relative to DIR
--relative-base=DIR
print absolute paths unless paths below DIR
-s, --strip, --no-symlinks
don't expand symlinks
-z, --zero
end each output line with NUL, not newline
--help display this help and exit
--version
output version information and exit
AUTHOR
Written by Padraig Brady.
REPORTING BUGS
Makefile
一つ上のディレクトリに対して絶対パスを取得するサンプルコードは以下の通りです。
成功
SAMPLE_DIR=$(shell realpath ..)/sample .PHONY : test test: @echo ${SAMPLE_DIR}
失敗
'${PWD%/*}'のような文字列置換は、Makefile だとうまくいきませんでした。
SAMPLE_DIR=${PWD%/*}/sample .PHONY : test test: @echo ${SAMPLE_DIR}