Stow

GNU stow 連結所有文件,而不僅僅是二進製文件

  • June 4, 2017

我必須做什麼才能stow正確連結二進製文件(可能還有手冊頁)?

我想使用 GNUstow來管理我機器上的本地安裝。但是,stow不只是符號連結二進製文件,而是程序文件夾中的所有文件。到目前為止我做了什麼:

  • 創建了一個擴展的 stow-ignore 文件
  • 使用src/除二進製文件以外的所有文件的子文件夾,並手動更改 Makefile 以創建bin/子文件夾。然後稍後刪除連結的local/src/文件夾

我想一定有更好的方法,我用stow錯了。

例子

文件夾結構

~home/
|~local/
  |+bin/     <-- binarys should go here
  |+share/   <-- man page
  |~stow/
    |-.stowrc
    |~dwm-6.0/
      |-Makefile
      |-dwm.c
      |-dwm.h
      |-dwm
      |-config.mk
      |-README
    |~hub-1.11/
      |~bin/
        |-hub
      |+etc/
      |+feature/
      |+githook/
      |+lib/
      |-Gemfile
      |-Rakefile
      |-hub.gemspec

從這裡我會進入stow/文件夾類型

stow dwm-6.0

然後 stow 將所有文件連結到local/文件夾中,而不僅僅是將二進製文件連結dwmlocal/bin/文件夾中。我現在可以更改Makefile它,它會創建一個dwm-6.0/bin/文件夾並將二進製文件移動到那裡。然後stow至少將連結dwmlocal/bin/,但所有其他文件仍然連結到local/

這同樣適用於hub

[9962]../stow:$stow hub-1.11.1
Loading defaults from .stowrc
stow dir is /home/myusername/local/stow
stow dir path relative to target /home/myusername/local is stow
Planning stow of package hub-1.11.1...
LINK: man => stow/hub-1.11.1/man
LINK: test => stow/hub-1.11.1/test
LINK: hub.gemspec => stow/hub-1.11.1/hub.gemspec
LINK: script => stow/hub-1.11.1/script
LINK: etc => stow/hub-1.11.1/etc
LINK: lib => stow/hub-1.11.1/lib
LINK: hub => stow/hub-1.11.1/hub
LINK: bin/hub => ../stow/hub-1.11.1/bin/hub
LINK: git-hooks => stow/hub-1.11.1/git-hooks
LINK: Rakefile => stow/hub-1.11.1/Rakefile
LINK: Gemfile => stow/hub-1.11.1/Gemfile
LINK: features => stow/hub-1.11.1/features
Planning stow of package hub-1.11.1... done
Processing tasks...
Processing tasks... done

現在stow甚至將man文件連結到單獨的文件夾而不是使用share/

===

.stow-global-ignore

# Comments and blank lines are allowed.

RCS
.+,v

CVS
\.\#.+       # CVS conflict files / emacs lock files
\.cvsignore

\.svn
_darcs
\.hg

\.git
\.gitignore


.+~          # emacs backup files
\#.*\#       # emacs autosave files
.*\.c        # c src files 
.*\.cc       # c++ src files 
#.*\.\d       # compile temporary files 
#.*\.\d\..*       # compile temporary files 
.*\.o        # object files
.*\.h        # include files
.*\.info
.*\.mk       # make configs
.*\.swp      # vim temp buffer file
.*\.lock     # vim temp buffer file
.*\.md       # mark down 
.*\.yml      # YAML
#.*\.gemspec  # gem file
#.*\.rb       # ruby file
#.*\.sh       # shell file
#.*\.feature  # shell file
README.*
LICENSE
FAQ
LEGACY
TODO
Makefile

.stowrc

--dir=/home/myusername/local/stow
--target=/home/myusername/local

一種方法是使用本地忽略列表,每個包一個。

但是,我相信您的方法從根本上是錯誤的,這使您的生活變得不必要地艱難。問題是您沒有區分建構時所需的文件與執行時所需的文件。像這樣的目錄是應該包含安裝圖像~/local/stow/dwm-6.0/包目錄,而不是原始碼或其他僅用於建構時使用的資源。

正確的工作流程如下:

  1. 將原始碼下載到 Stow 完全忽略的目錄中(例如~/src)。
  2. 從原始碼建構並安裝到~/local/stow/dwm-6.0/手冊中有很多關於如何實現這一點的提示
  3. 驗證~/local/stow/dwm-6.0/僅包含執行時所需的目錄文件(下的文件bin/man/
  4. stow dwm-6.0

引用自:https://unix.stackexchange.com/questions/131493