次のようなアプリ固有のディレクトリに複数の Makefile があります。
/project1/apps/app_typeA/Makefile
/project1/apps/app_typeB/Makefile
/project1/apps/app_typeC/Makefile
各 Makefile には、次のパスの 1 レベル上に .inc ファイルが含まれています。
/project1/apps/app_rules.inc
app_rules.inc 内で、ビルド時にバイナリを配置する場所を設定しています。すべてのバイナリをそれぞれのapp_type
パスに配置するようにします。
/project1/bin/app_typeA/
次のように使用してみました$(CURDIR)
:
OUTPUT_PATH = /project1/bin/$(CURDIR)
しかし、代わりにバイナリがパス名全体に埋め込まれました。(冗長性に注意してください)
/project1/bin/projects/users/bob/project1/apps/app_typeA
app_typeX
バイナリをそれぞれのタイプのフォルダーに配置するために、実行の「現在のディレクトリ」を取得するにはどうすればよいでしょうか?
ベストアンサー1
シェル関数。
使用できますshell
機能:current_dir = $(shell pwd)
またはshell
と組み合わせてnotdir
絶対パスが必要ない場合: current_dir = $(notdir $(shell pwd))
.
アップデート。
make
与えられた解決策は、Makefile の現在のディレクトリから実行している場合にのみ機能します。
@Flimm が指摘したように:
これは Makefile の親ディレクトリではなく、現在の作業ディレクトリを返すことに注意してください。
たとえば、 を実行するとcd /; make -f /home/username/project/Makefile
、変数はではなく にcurrent_dir
なります。/
/home/username/project/
以下のコードは、どのディレクトリから呼び出された Makefile でも機能します。
mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
current_dir := $(notdir $(patsubst %/,%,$(dir $(mkfile_path))))