【发布时间】:2009-07-28 12:03:06
【问题描述】:
cmake 建议使用源外构建。虽然总的来说我喜欢这个想法,但我发现从源代码外的子目录导航到相应的源目录并不方便。我经常需要代码来执行一些代码操作(例如 grep、svn 命令等)。
在 shell 中是否有一种简单的方法可以从源外子目录导航到相应的源目录?
谢谢 迪玛
【问题讨论】:
cmake 建议使用源外构建。虽然总的来说我喜欢这个想法,但我发现从源代码外的子目录导航到相应的源目录并不方便。我经常需要代码来执行一些代码操作(例如 grep、svn 命令等)。
在 shell 中是否有一种简单的方法可以从源外子目录导航到相应的源目录?
谢谢 迪玛
【问题讨论】:
我更喜欢保持简单,在src/ 目录中检查源代码,并在build/ 目录中进行相应的构建。然后我可以使用
function cs() {
cd "${PWD/build/src}"
}
function cb() {
cd "${PWD/src/build}"
}
参照。也可以KDE's TechBase 了解另一种方法。
【讨论】:
我认为最直接和最方便的方法是打开多个 Shell 会话,即选项卡。例如,KDE4 Konsole 支持选项卡,您可以使用 Shift + ArrowLeft 或 ArrowRight 在它们之间导航。恕我直言,非常舒适,而且它更好地保存了历史。
【讨论】:
在/source/directory时
pushd /to/build/directory在那里工作
popd##回到源目录
你甚至可以stack 更深...
【讨论】:
好的,这就是我发现的。这个想法是使用在源外树中找到的 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
}
【讨论】:
"$like_this,所以它也可以在路径中有空格的层次结构中工作。