Stow
GNU stow 連結所有文件,而不僅僅是二進製文件
我必須做什麼才能
stow
正確連結二進製文件(可能還有手冊頁)?我想使用 GNU
stow
來管理我機器上的本地安裝。但是,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/
文件夾中,而不僅僅是將二進製文件連結dwm
到local/bin/
文件夾中。我現在可以更改Makefile
它,它會創建一個dwm-6.0/bin/
文件夾並將二進製文件移動到那裡。然後stow
至少將連結dwm
到local/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/
的包目錄,而不是原始碼或其他僅用於建構時使用的資源。正確的工作流程如下:
- 將原始碼下載到 Stow 完全忽略的目錄中(例如
~/src
)。- 從原始碼建構並安裝到
~/local/stow/dwm-6.0/
(手冊中有很多關於如何實現這一點的提示)- 驗證
~/local/stow/dwm-6.0/
僅包含執行時所需的目錄文件(下的文件bin/
等man/
)stow dwm-6.0