makefile変数から最上位ディレクトリを取得する

makefile変数から最上位ディレクトリを取得する

makefile変数の最上位ディレクトリ部分を取得する最も簡単なコードは何ですか?例:

BUILD_DIR = dir/subdir/.../sub-a-dub-dir
distclean:
        rm -rf <some code which evaluates to "dir" from $(BUILD_DIR)>

PS:私の言葉ではありませんが、$(dir $(dir $(BUILD_DIR)))最初のディレクトリ部分からエントリを取得します。どの変わりやすい。

答え1

ディレクトリの最初のコンポーネントを意味しますか?その場合は、パスをコンポーネントのリストに変換し、最初のコンポーネントを抽出します。私はあなたがGNU makeを使用していて、空白を含むファイル名が無事に抜け出すのを期待しているような狂気をしていないと仮定します。絶対パスを使用しないでください。

override BUILD_DIR = dir/subdir/.../sub-a-dub-dir
distclean:
        rm -rf $(firstword $(subst /, ,$(BUILD_DIR)))

BUILD_DIR誰かが誤って転送し、誤って何かを削除するのを防ぐために、ユーザーがコマンドラインから渡すことができるすべての内容を上書きします。

答え2

BUILD_DIRが "/"で始まらないと確信している場合:

rootdir=$( echo $BUILD_DIR | cut -d/ -f1 )

それ以外の場合は、「/」で始まるパスを検討できます。

if [[ $BUILD_DIR =~ "^/" ]]; then
        rootdir=$( echo $BUILD_DIR | cut -d/ -f1,2 )
else
        rootdir=$( echo $BUILD_DIR | cut -d/ -f1 )
fi

echo $rootdir

あるいは、「/」で始まるパスを無視する方が良いかもしれません。

関連情報