Matrix

CarlyleLiu‘s Blog

合并文件

1
ffmpeg -i "concat:file_name1.ts | file_name2.ts" -c copy_out.ts

在视频文件中提取图片

1
ffmpeg -i output.ts '%d.png'
阅读全文 »

Makefile 规则

一个简单的 Makefile 文件包含一系列的“规则”,其样式如下:

1
目标 (target)…: 依赖 (prerequiries)…<tab>命令 (command)
  • 目标 (target) 通常是要生成的文件的名称,可以是可执行文件或 OBJ 文件,也可以是一个执行的动作名称,诸如`clean’。
  • 依赖是用来产生目标的材料(比如源文件),一个目标经常有几个依赖。
  • 命令是生成目标时执行的动作,一个规则可以含有几个命令,每个命令占一行。 注意:每个命令行前面必须是一个 Tab 字符,即命令行第一个字符是 Tab。

通常,如果一个依赖发生了变化,就需要规则调用命令以更新或创建目标。但是并非所有的目标都有依赖,例如,目标“clern”的作用是清除文件,它没有依赖。 规则一般是用于解释怎样和何时重建目标。

make 首先调用命令处理依赖,进而才能创建或更新目标。当然,一个规则也可以是用于解释怎样和何时执行一个动作,即打印提示信息。一个 Makefile 文件可以包含规则以外的其他文本,但一个简单的 Makefile 文件仅仅需要包含规则。虽然真正的规则比这里展示的例子复杂,但格式是完全一样的。

对于上面的 Makefile,执行“make”命令时,仅当 hello.c 文件比 hello 文件新时才会执行命令“arm-linux-gcc –o hello hello.c”生成可执行文件 hello;如果还没有 hello 文件,这个命令也会执行。 运行“make clean”时,由于目标 clean 没有依赖,它的命令“rm -f hello”将被强制执行。

阅读全文 »

gcc 编译流程

一个 C/C++文件要经过预处理 (preprocessing)、编译 (compilation)、汇编 (assembly) 和链接 (linking) 等 4 步才能变成可执行文件。

预处理

C/C++源文件中,以“#”开头的命令被称为预处理命令,如包含命令“#include”、宏定义命令“#define”、条件编译命令“#if”、“#ifdef”等。预处理就是将要包含 (include) 的文件插入原文件中、将宏定义展开、根据条件编译命令选择要使用的代码,最后将这些东西输出到一个“.i”文件中等待进一步处理。

编译

编译就是把 C/C++代码(比如上述的“.i”文件)“翻译”成汇编代码,所用到的工具为 cc1(它的名字就是 cc1,x86 有自己的 cc1 命令,ARM 板也有自己的 cc1 命令)。

汇编

汇编就是将第二步输出的汇编代码翻译成符合一定格式的机器代码,在 Linux 系统上一般表现为 ELF 目标文件 (OBJ 文件),用到的工具为 as。x86 有自己的 as 命令,ARM 版也有自己的 as 命令,也可能是 xxxx-as(比如 arm-linux-as)。

链接

链接就是将上步生成的 OBJ 文件和系统库的 OBJ 文件、库文件链接起来,最终生成了可以在特定平台运行的可执行文件,用到的工具为 ld 或 collect2。

编译程序时,加上-v 选项就可以看到这几个步骤

阅读全文 »

常用

git 与上游 保持同步

1
2
3
git remote add src-zephyr <https://github.com/zephyrproject-rtos/zephyr>
git pull src-zephyr master
git push

git 合并分支

1
2
3
git revert
git pull --rebase origin
git pull --rebase origin release-v1.0

如果有冲突:

1
2
3
git status # 查看冲突文件并解决冲突
git add # 提交解决冲突后的文件
git rebase --continue # 完成
阅读全文 »
0%