GNU stow 链接所有文件而不是仅链接二进制文件

GNU stow 链接所有文件而不是仅链接二进制文件

我必须做什么才能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

然后收藏链接全部文件放入local/文件夹中,而不是仅将二进制文件dwm放入local/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-全局-忽略

# 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

答案1

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

然而,我相信你的方法从根本上来说是错误的,这让你的生活变得不必要的困难。问题是您没有区分构建时所需的文件与运行时所需的文件。像这样的目录~/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

答案2

B·康尼斯'2014年10月10日博客条目“GNU 存储包含文件”。总而言之,正则表达式:

^((?!(\/)bin|include|lib|lib64|local|sbin|share|tmp).)*$

在全局忽略列表中将“仅”存储那些(bin、include 等)目录。

答案3

看起来您正在存放其中包含源代码的目录。

使用configure(或软件正在使用的任何构建系统)并在stow目录下设置安装前缀。运行makemake install,然后存放已安装的程序。

这就是stow应该如何使用...

相关内容