cmake は、アウト オブ ソース ビルドの使用を推奨しています。一般的にはこのアイデアは気に入っていますが、ソース外のサブディレクトリから対応するソースディレクトリに移動するのは快適ではありません。コードでいくつかのアクションを実行するためにコードが必要になることがよくあります (例: grep、svn コマンドなど)。
シェルでソース外のサブディレクトリから対応するソースディレクトリに移動する簡単な方法はありますか?
ありがとうディマ
私はシンプルに保ち、ソースのチェックアウトをsrc/
ディレクトリに置き、対応するビルドをディレクトリに置くことを好みbuild/
ます。それから私は使うことができます
function cs() {
cd "${PWD/build/src}"
}
function cb() {
cd "${PWD/src/build}"
}
参照。別のアプローチについては、KDE の TechBaseも参照してください。
これを行うための最も簡単で便利な方法は、単純に複数のシェル セッション (つまりタブ) を開くことだと思います。たとえば、KDE4 Konsole はタブをサポートしており、Shift + ArrowLeft または ArrowRight でそれらをナビゲートできます。私見は非常に快適で、履歴をより適切に保存します。
これが私が見つけたものです。アイデアは、ソース外ツリーにある CMakeCache.txt を使用することです。キャッシュファイルを探しながら上っていきます。見つかったら、CMAKE_HOME_DIRECTORY 変数に格納されているソース ディレクトリを抽出します。
function cdoos2src () {
path=$(pwd)
while [[ $path != "/" ]]; do
if [[ -f $path/CMakeCache.txt ]]; then
break;
fi
# go up one directory
path=$(dirname $path)
done
if [[ $path == "/" ]]; then
echo "This is not svn out-of-source directory - CmakeCache.txt not found"
return
fi
oos_dir=$(pwd)
code_dir=$(sed -n '/CMAKE_HOME_DIRECTORY/s/.*=//p' $path/CMakeCache.txt)
echo "Code dir [$code_dir]"
code_sub_dir=$(echo $(pwd) | sed -n 's#^'$path'##p')
echo "Code sub dir [$code_sub_dir]"
cd $code_dir/$code_sub_dir
}
pushd
およびpopd
ビルトインを試しましたか?
とき/source/directory
pushd /to/build/directory
そこで働く
popd
## ソースディレクトリに戻る
あなたはさらにstack
深くすることができます...