【问题标题】:cmake source and out-of-source navigationcmake源和源外导航
【发布时间】:2009-07-28 12:03:06
【问题描述】:

cmake 建议使用源外构建。虽然总的来说我喜欢这个想法,但我发现从源代码外的子目录导航到相应的源目录并不方便。我经常需要代码来执行一些代码操作(例如 grep、svn 命令等)。

在 shell 中是否有一种简单的方法可以从源外子目录导航到相应的源目录?

谢谢 迪玛

【问题讨论】:

    标签: linux bash cmake


    【解决方案1】:

    我更喜欢保持简单,在src/ 目录中检查源代码,并在build/ 目录中进行相应的构建。然后我可以使用

    function cs() {
        cd "${PWD/build/src}"
    }
    function cb() {
        cd "${PWD/src/build}"
    }
    

    参照。也可以KDE's TechBase 了解另一种方法。

    【讨论】:

    • 是的,简单就是好,但是如果你有多个构建目录怎么办?
    • 然后我们离开“简单”的领域:)
    • 是的,我们经常离开它:)
    【解决方案2】:

    我认为最直接和最方便的方法是打开多个 Shell 会话,即选项卡。例如,KDE4 Konsole 支持选项卡,您可以使用 Shift + ArrowLeft 或 ArrowRight 在它们之间导航。恕我直言,非常舒适,而且它更好地保存了历史。

    【讨论】:

      【解决方案3】:

      你试过pushd and popd builtins吗?

      /source/directory

      pushd /to/build/directory

      在那里工作

      popd##回到源目录

      你甚至可以stack 更深...

      【讨论】:

      • 我什至可以使用“cd”,然后使用“cd -”来前进和后退。问题是当我在源外树中编译时,我可以导航到任何子目录。现在 cd/cd- 不行了,我也不会去设计对应的源码目录是什么。
      【解决方案4】:

      好的,这就是我发现的。这个想法是使用在源外树中找到的 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,所以它也可以在路径中有空格的层次结构中工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多