我最近在我的服务器上安装了 LAME 编码器以将 wav 转换为 mp3 并与./configure; make; make install.
然后我尝试安装 OGG 编码器,这需要 './configure, make, sudo make install' - 这是我做不到的,因为我没有 VPS(我宁愿不每月为 VPN 支付 15 美元)安装编解码器)。
我是这一切的新手,我知道 sudo 为您提供了权限 - 但我一直试图找出为什么有些make installs 需要 sudo 访问权限而其他人不需要。我还没有找到答案。
Makefile 中的每个命令都由单独的 shell 执行。
这是什么原因?为什么命令不像在常规脚本中那样执行?我知道可以使用.ONESHELL特殊目标使用一个 shell 。
但是默认行为的原因是什么?
我有一个我正在处理的 Latex 项目的 Makefile。Makefiles 不是我的强项,但有没有办法做这样的事情:
make git "My comment"
Run Code Online (Sandbox Code Playgroud)
并让 makefile 执行:
git commit -m "My comment"
git push origin master
Run Code Online (Sandbox Code Playgroud)
?
我看到了一个 makefile,其中包含 $@ 和 $< 符号。我从未见过它们,谷歌也没有显示任何关于它们的结果。你知道这些命令的作用吗?
有没有办法在 a 中标记一些目标,Makefile以便在用户键入make然后按下时它们根本不会出现在 shell 中Tab?我Makefile有太多的配方,当用户按下Tab寻找目标时,我不希望它们全部出现在 shell 自动完成中。
该Makefile是:
%.pdf: %.tex
rubber -d $<
Run Code Online (Sandbox Code Playgroud)
如果doc.tex目录中有 a ,则make doc.pdf构建doc.pdf. 问题是,当我输入 时make,自动完成什么也没给出:它甚至不允许自动完成到make doc.tex. 可以做些什么呢?
我已经看到这make对大型项目很有用,尤其是在 a 中描述的令人困惑的依赖项Makefile,并且还有助于工作流程。我还没有听说make用于小型项目的任何优势。有吗?
假设doc.pdf是目标。
以下规则触发了doc.pdf每当doc.refer更新时的重新生成,但在doc.refer根本不存在时也很高兴:
doc.pdf: doc.mom $(wildcard doc.refer)
pdfmom -e -k < $< > $@
Run Code Online (Sandbox Code Playgroud)
但是,以下模式规则并没有完成相同的任务(PDF 生成正确,但更改时不会触发重建doc.refer):
%.pdf: %.mom Makefile $(wildcard %.refer)
pdfmom -e -k < $< > $@
Run Code Online (Sandbox Code Playgroud)
我怀疑该wildcard命令是在%扩展字符之前执行的。我该如何解决这个问题?
当.ONESHELL不使用生成文件执行在一个单独的外壳的每个外壳命令。这有什么好处?为什么makefile 不使用相同的shell?