小编bob*_*ogo的帖子

使用ffmpeg/mencoder/transcode等转储视频文件的最后一帧.人

我想抓住最后一帧的视频(.mpg,.avi,等等),并转储到一个图像文件(.jpg,.png,等等).工具链是一个现代的Linux 命令行,所以像mencoder,transcode,ffmpeg&C.

干杯,鲍勃.

ffmpeg mencoder imagemagick transcoding video-editing

16
推荐指数
1
解决办法
1万
查看次数

如何强制某些目标组始终按顺序运行?

有没有办法让gmake永远不会从一组并行运行两个目标?

我不想使用.NOTPARALLEL,因为它强制整个Makefile按顺序运行,而不仅仅是所需的部分.

我还可以添加依赖项,以便一个依赖于另一个,但是然后(除了uglu)我需要构建所有它们以构建最后一个,这是不必要的.


我需要这个的原因是我的Makefile的一部分(只有一部分)调用ghc --make,它自己处理它的依赖.并且不可能在两个不同的目标上并行运行它,因为如果两个目标共享一些依赖关系,它们可以重写彼此的.o文件.(但ghc顺序调用很好.)

更新:举一个具体的例子.假设我需要在Makefile中编译两个程序:

  • prog1取决于prog1.hsmylib.hs;
  • prog2取决于prog2.hsmylib.hs.

现在,如果我调用ghc --make prog1.hs,它会检查它的依赖,既编译prog1.hsmylib.hs到各自的目标和接口文件和链接prog1.我打电话时也是如此ghc --make prog2.hs.因此,如果两个命令并行运行,则会覆盖mylib.o另一个命令,从而导致其严重失败.

但是,我需要它既不prog1依赖prog2也不反过来,因为它们应该单独编译.(实际上它们非常庞大,有很多模块,需要编译它们都会大大减慢开发速度.)

parallel-processing makefile gnu-make ghc

14
推荐指数
1
解决办法
2966
查看次数

带有许多目标目录的 GNU make

我必须在现有的 .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,规则搜索的工作方式如下:

  1. 将整个目标名称t拆分为目录部分,称为d,其余部分称为n。例如,如果tsrc/foo.o,则dsrc/,而nfoo.o
  2. 列出其中一个目标与tn匹配的所有模式规则。如果目标模式包含斜杠,则与t匹配;否则,针对n

为什么没有找到隐式规则,假设使用 GNU,最优雅的解决方案make是什么?

这是我的精简版Makefile: …

makefile gnu-make release-management build-management

4
推荐指数
1
解决办法
3764
查看次数

Vim:存在"1"时编辑"[1]"的便携方式

所以,我想编辑文件[1].问题是,我也有一个名为的文件1.我也使用cygwin及其bashshell,win32 cmd和Linux.有时我使用cygwin vim,有时我使用win32 vimgvim.

我找不到打开文件的一致方法[1].通常vim会将[1]文件视为glob,1而是打开.

在linux中,:e [1]失败了,但是:e \[1]有效.在win32中,:e \[1]失败了.

我似乎被困在一个曲折的迷宫中,涉及fnameescape(),shellslashisfname选项,以及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)

vim bash cygwin cmd

4
推荐指数
1
解决办法
139
查看次数