可参考博客的详细解释一起写 Makefile
概述
基本规则
1 | target ... : prerequisites ... |
- target 可以是一个 object file(目标文件),也可以是一个执行文件,还可以是一个标签(label)。即
:
后面什么也没有,make 就不会自动查找它的依赖性,也不会执行其定义的命令,可以通过make <label>
的方式手动执行。makefile 的第一个 target 会被默认执行。 - prerequisites 生成该 target 所依赖的文件和/或 target。如果 prerequisites 文件的日期要比 targets 文件的日期要新,或者 target 不存在的话,那么,make 就会执行后续定义的命令。 make 会一层一层的去找文件的依赖关系,直到最终编译出第一个目标文件。
- command 该 target 要执行的命令(任意的 shell 命令),要以一个
Tab
键作为开头,,命令可以为多行,每行命令在独立的进程中执行,不会共享变量,
1 |
|
伪目标一般没有依赖文件,但是也可以为伪目标制定锁依赖的文件。伪目标同样也可以作为“默认目标”,只要将其放在第一个。伪目标只是一个标签不会生成文件,它总是会被执行
1 | all:prog1 prog2 prog3 |
参数
- -j 并行编译
libvpx
1 | ./configure --enable-pic --enable-static --enable-shared --as=yasm --target=generic-gnu |
gcc 版本
Centos7 gcc 版本默认 4.8.3,Red Hat 为了软件的稳定和版本支持,yum 上版本也是 4.8.3,所以无法使用 yum 进行软件更新,所以使用 scl。
scl 软件集(Software Collections),是为了给 RHEL/CentOS 用户提供一种以方便、安全地安装和使用应用程序和运行时环境的多个(而且可能是更新的)版本的方式,同时避免把系统搞乱。
使用 scl 升级 gcc 步骤:
1 | 安装scl源: |