Makefile の現在の相対ディレクトリを取得するにはどうすればいいですか? 質問する

Makefile の現在の相対ディレクトリを取得するにはどうすればいいですか? 質問する

次のようなアプリ固有のディレクトリに複数の 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))))

おすすめ記事