我想抓住最后一帧的视频(.mpg,.avi,等等),并转储到一个图像文件(.jpg,.png,等等).工具链是一个现代的Linux 命令行,所以像mencoder,transcode,ffmpeg&C.
干杯,鲍勃.
有没有办法让gmake永远不会从一组并行运行两个目标?
我不想使用.NOTPARALLEL,因为它强制整个Makefile按顺序运行,而不仅仅是所需的部分.
我还可以添加依赖项,以便一个依赖于另一个,但是然后(除了uglu)我需要构建所有它们以构建最后一个,这是不必要的.
我需要这个的原因是我的Makefile的一部分(只有一部分)调用ghc --make,它自己处理它的依赖.并且不可能在两个不同的目标上并行运行它,因为如果两个目标共享一些依赖关系,它们可以重写彼此的.o文件.(但ghc顺序调用很好.)
更新:举一个具体的例子.假设我需要在Makefile中编译两个程序:
prog1取决于prog1.hs和mylib.hs;prog2取决于prog2.hs和mylib.hs.现在,如果我调用ghc --make prog1.hs,它会检查它的依赖,既编译prog1.hs并mylib.hs到各自的目标和接口文件和链接prog1.我打电话时也是如此ghc --make prog2.hs.因此,如果两个命令并行运行,则会覆盖mylib.o另一个命令,从而导致其严重失败.
但是,我需要它既不prog1依赖prog2也不反过来,因为它们应该单独编译.(实际上它们非常庞大,有很多模块,需要编译它们都会大大减慢开发速度.)
我必须在现有的 .html 文件中集成许多 HTML 文件的生成Makefile。问题是 HTML 文件需要驻留在许多不同的目录中。我的想法是写一个隐式规则,将源文件(*.st)转换成对应的html文件
%.html: %.st
$(HPC) -o $@ $<
Run Code Online (Sandbox Code Playgroud)
以及依赖于所有 html 文件的规则
all: $(html)
Run Code Online (Sandbox Code Playgroud)
如果 HTML 文件不在 builddir 中,则make找不到隐式规则:*** No rule to make target. 如果我像这样更改隐式规则
$(rootdir)/build/doc/2009/06/01/%.html: %.st
$(HPC) -o $@ $<
Run Code Online (Sandbox Code Playgroud)
它找到了,但是我必须对项目中的几乎每个文件都有一个隐式规则。根据GNU手册中的隐式规则搜索算法make,规则搜索的工作方式如下:
- 将整个目标名称t拆分为目录部分,称为d,其余部分称为n。例如,如果t是
src/foo.o,则d是src/,而n是foo.o。- 列出其中一个目标与t或n匹配的所有模式规则。如果目标模式包含斜杠,则与t匹配;否则,针对n。
为什么没有找到隐式规则,假设使用 GNU,最优雅的解决方案make是什么?
这是我的精简版Makefile: …
所以,我想编辑文件[1].问题是,我也有一个名为的文件1.我也使用cygwin及其bashshell,win32 cmd和Linux.有时我使用cygwin vim,有时我使用win32 vim和gvim.
我找不到打开文件的一致方法[1].通常vim会将[1]文件视为glob,1而是打开.
在linux中,:e [1]失败了,但是:e \[1]有效.在win32中,:e \[1]失败了.
我似乎被困在一个曲折的迷宫中,涉及fnameescape(),shellslash和isfname选项,以及win32 vim尝试处理\作为路径分隔符.
啊哈!
:e [[]1]似乎工作(?).当然有一些"官方"方式(比如调用vim函数)来获得这种模式?(编辑:不,这只有在[1] 已经存在时才有效.叹气.)
编辑
在Ingo Karkat的回答之后,我的文件加载bash脚本现在有了这个片段:
# Double single quotes are single quotes in a single-quoted vim string (got that?)
FILE=${FILE//\'/\'\'}
[[ -n $FILE ]] && gvim -u NONE …Run Code Online (Sandbox Code Playgroud)