-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
408 additions
and
41 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,271 @@ | ||
# [Linux下使用automake、autoconf生成configure文件 ](https://www.cnblogs.com/bugutian/p/5560548.html) | ||
|
||
## 一、生成configure过程中各文件之间的关系图 | ||
|
||
![img](https://images2015.cnblogs.com/blog/753880/201606/753880-20160605121846586-1241135412.jpg) | ||
|
||
## 二、详细介绍 | ||
|
||
autoscan: 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是configure.ac的一个雏形。 | ||
|
||
aclocal:根据已经安装的宏,用户定义宏和acinclude.m4文件中的宏将configure.ac文件所需要的宏集中定义到文件 aclocal.m4中。aclocal是一个perl 脚本程序,它的定义是:“aclocal - create aclocal.m4 by scanning configure.ac” | ||
|
||
automake:将Makefile.am中定义的结构建立Makefile.in,然后configure脚本将生成的Makefile.in文件转换 为Makefile。如果在configure.ac中定义了一些特殊的宏,比如AC_PROG_LIBTOOL,它会调用libtoolize,否则它 会自己产生config.guess和config.sub | ||
|
||
autoconf:将configure.ac中的宏展开,生成configure脚本。这个过程可能要用到aclocal.m4中定义的宏。 | ||
|
||
## 三、实例 | ||
|
||
### 1.测试代码(定义两个文件hello.h和hello.c) | ||
|
||
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) | ||
|
||
``` | ||
/*hello.c*/#include <iostream> | ||
#include "hello.h" | ||
using namespace std; | ||
int main() | ||
{ | ||
CHello a; | ||
return 0; | ||
} | ||
``` | ||
|
||
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) | ||
|
||
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) | ||
|
||
``` | ||
/*hello.h*/#ifndef __HELLO_H__ | ||
#define __HELLO_H__ | ||
#include<iostream> | ||
using namespace std; | ||
class CHello | ||
{ | ||
public: | ||
CHello(){ cout<<"Hello!"<<endl;} | ||
~CHello(){ cout<<"Bye!"<<endl;} | ||
}; | ||
#endif | ||
``` | ||
|
||
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) | ||
|
||
### 2.操作步骤 | ||
|
||
#### (1)安装依赖的包 | ||
|
||
``` | ||
[root@bogon autoconfig]# yum -y install automake autoconf | ||
``` | ||
|
||
automake包括:aclocal、automake等 | ||
|
||
autoconf包括:autoscan、autoconf等 | ||
|
||
#### (2)autoscan | ||
|
||
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) | ||
|
||
``` | ||
[root@bogon autoconfig]# ll | ||
-rw-r--r-- 1 root root 105 Jun 4 hello.cpp | ||
-rw-r--r-- 1 root root 189 Jun 4 hello.h | ||
[root@bogon autoconfig]# autoscan | ||
[root@bogon autoconfig]# ll | ||
total 12 | ||
-rw-r--r-- 1 root root 0 Jun 4 autoscan.log | ||
-rw-r--r-- 1 root root 481 Jun 4 configure.scan | ||
-rw-r--r-- 1 root root 105 Jun 4 hello.cpp | ||
-rw-r--r-- 1 root root 189 Jun 4 hello.h | ||
``` | ||
|
||
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) | ||
|
||
#### (3)aclocal | ||
|
||
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) | ||
|
||
``` | ||
[root@bogon autoconfig]# mv configure.scan configure.ac | ||
[root@bogon autoconfig]# vim configure.ac /*将下面红色加粗的部分修改掉*/ | ||
# -*- Autoconf -*- | ||
# Process this file with autoconf to produce a configure script. | ||
AC_PREREQ([2.69]) | ||
AC_INIT(hello, 1.0, [email protected])AM_INIT_AUTOMAKE(hello, 1.0) | ||
AC_CONFIG_SRCDIR([hello.cpp]) | ||
AC_CONFIG_HEADERS([config.h]) | ||
# Checks for programs. | ||
AC_PROG_CXX | ||
AC_PROG_CC | ||
# Checks for libraries. | ||
# Checks for header files. | ||
# Checks for typedefs, structures, and compiler characteristics. | ||
# Checks for library functions. | ||
AC_OUTPUT(Makefile) | ||
[root@bogon autoconfig]# aclocal | ||
[root@bogon autoconfig]# ll | ||
total 52 | ||
-rw-r--r-- 1 root root 37794 Jun 4 aclocal.m4 | ||
drwxr-xr-x 2 root root 51 Jun 4 autom4te.cache | ||
-rw-r--r-- 1 root root 0 Jun 4 autoscan.log | ||
-rw-r--r-- 1 root root 492 Jun 4 configure.ac | ||
-rw-r--r-- 1 root root 105 Jun 4 hello.cpp | ||
-rw-r--r-- 1 root root 189 Jun 4 hello.h | ||
``` | ||
|
||
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) | ||
|
||
下面给出本文件的简要说明(所有以”#”号开始的行为注释): | ||
**·** **AC_PREREQ** 宏声明本文件要求的autoconf版本,本例使用的版本为2.59。 | ||
**· AC_INIT** 宏用来定义软件的名称和版本等信息,”FULL-PACKAGE-NAME”为软件包名称,”VERSION”为软件版本号,”BUG-REPORT-ADDRESS”为BUG报告地址(一般为软件作者邮件地址)。 | ||
**·AC_CONFIG_SRCDIR** 宏用来侦测所指定的源码文件是否存在,来确定源码目录的有效性。此处为当前目录下的hello.c。 | ||
**·AC_CONFIG_HEADER** 宏用于生成config.h文件,以便autoheader使用。 | ||
**·AC_PROG_CC** 用来指定编译器,如果不指定,选用默认gcc。 | ||
**·AC_OUTPUT** 用来设定 configure 所要产生的文件,如果是makefile,configure会把它检查出来的结果带入makefile.in文件产生合适的makefile。使用Automake时,还需要一些其他的参数,这些额外的宏用aclocal工具产生。 | ||
|
||
#### (3)autoconf | ||
|
||
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) | ||
|
||
``` | ||
[root@bogon autoconfig]# autoconf | ||
[root@bogon autoconfig]# ll | ||
total 204 | ||
-rw-r--r-- 1 root root 37794 Jun 4 aclocal.m4 | ||
drwxr-xr-x 2 root root 81 Jun 4 autom4te.cache | ||
-rw-r--r-- 1 root root 0 Jun 4 autoscan.log | ||
-rwxr-xr-x 1 root root 154727 Jun 4 configure | ||
-rw-r--r-- 1 root root 492 Jun 4 configure.ac | ||
-rw-r--r-- 1 root root 105 Jun 4 hello.cpp | ||
-rw-r--r-- 1 root root 189 Jun 4 hello.h | ||
``` | ||
|
||
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) | ||
|
||
此时可以看到已经生成了configure | ||
|
||
#### (4)autoheader | ||
|
||
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) | ||
|
||
``` | ||
[root@bogon autoconfig]# autoheader | ||
[root@bogon autoconfig]# ll | ||
total 208 | ||
-rw-r--r-- 1 root root 37794 Jun 4 aclocal.m4 | ||
drwxr-xr-x 2 root root 81 Jun 4 autom4te.cache | ||
-rw-r--r-- 1 root root 0 Jun 4 autoscan.log | ||
-rw-r--r-- 1 root root 625 Jun 4 config.h.in | ||
-rwxr-xr-x 1 root root 154727 Jun 4 configure | ||
-rw-r--r-- 1 root root 492 Jun 4 configure.ac | ||
-rw-r--r-- 1 root root 105 Jun 4 hello.cpp | ||
-rw-r--r-- 1 root root 189 Jun 4 hello.h | ||
``` | ||
|
||
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) | ||
|
||
autoheader生成了configure.h.in如果在configure.ac中定义了AC_CONFIG_HEADER,那么此文件就需要; | ||
|
||
#### (5)Makefile.am | ||
|
||
``` | ||
[root@bogon autoconfig]# vim Makefile.am | ||
[root@bogon autoconfig]# cat Makefile.am | ||
AUTOMAKE_OPTIONS=foreign | ||
bin_PROGRAMS=hello | ||
hello_SOURCES=hello.cpp hello.h | ||
``` | ||
|
||
**· AUTOMAKE_OPTIONS** 为设置Automake的选项。由于GNU对自己发布的软件有严格的规范,比如必须附带许可证声明文件COPYING等,否则Automake执行时会报错。Automake提供了3种软件等级:foreign、gnu和gnits,供用户选择,默认等级为gnu。本例使需用foreign等级,它只检测必须的文件。 | ||
**· bin_PROGRAMS** 定义要产生的执行文件名。如果要产生多个执行文件,每个文件名用空格隔开。 | ||
**· hello_SOURCES** 定义”hello”这个执行程序所需要的原始文件。如果”hello”这个程序是由多个原始文件所产生的,则必须把它所用到的所有原始文件都列出来,并用空格隔开。例如:若目标体”hello”需要”hello.c”、”hello.h”两个依赖文件,则定义hello_SOURCES=hello.c hello.h。 | ||
|
||
#### (6)automake | ||
|
||
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) | ||
|
||
``` | ||
[root@bogon autoconfig]# automake --add-missing | ||
configure.ac:6: warning: AM_INIT_AUTOMAKE: two- and three-arguments forms are deprecated. For more info, see: | ||
configure.ac:6: http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-invocation | ||
configure.ac:6: installing './install-sh' | ||
configure.ac:6: installing './missing' | ||
[root@bogon autoconfig]# ll | ||
total 236 | ||
-rw-r--r-- 1 root root 37794 Jun 4 aclocal.m4 | ||
drwxr-xr-x 2 root root 81 Jun 4 autom4te.cache | ||
-rw-r--r-- 1 root root 0 Jun 4 autoscan.log | ||
-rw-r--r-- 1 root root 625 Jun 4 config.h.in | ||
-rwxr-xr-x 1 root root 154727 Jun 4 configure | ||
-rw-r--r-- 1 root root 492 Jun 4 configure.ac | ||
-rw-r--r-- 1 root root 105 Jun 4 hello.cpp | ||
-rw-r--r-- 1 root root 189 Jun 4 hello.h | ||
lrwxrwxrwx 1 root root 35 Jun 4 install-sh -> /usr/share/automake-1.13/install-sh | ||
-rw-r--r-- 1 root root 79 Jun 4 Makefile.am | ||
-rw-r--r-- 1 root root 22227 Jun 4 Makefile.in | ||
lrwxrwxrwx 1 root root 32 Jun 4 missing -> /usr/share/automake-1.13/missing | ||
``` | ||
|
||
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) | ||
|
||
此步主要是为了生成Makefile.in,加上--add-missing参数后,会补全缺少的脚本; | ||
|
||
#### (6)测试 | ||
|
||
``` | ||
[root@bogon autoconfig]# ./configure | ||
[root@bogon autoconfig]# make | ||
[root@bogon autoconfig]# ./hello | ||
Hello! | ||
Bye! | ||
``` | ||
|
||
和平时安装许多开源软件一样操作 | ||
|
||
#### (7)打包 | ||
|
||
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) | ||
|
||
``` | ||
[root@bogon autoconfig]# make dist | ||
[root@bogon autoconfig]# ll | ||
total 436 | ||
-rw-r--r-- 1 root root 37794 Jun 4 aclocal.m4 | ||
drwxr-xr-x 2 root root 81 Jun 4 autom4te.cache | ||
-rw-r--r-- 1 root root 0 Jun 4 autoscan.log | ||
-rw-r--r-- 1 root root 758 Jun 4 config.h | ||
-rw-r--r-- 1 root root 625 Jun 4 config.h.in | ||
-rw-r--r-- 1 root root 11031 Jun 4 config.log | ||
-rwxr-xr-x 1 root root 32557 Jun 4 config.status | ||
-rwxr-xr-x 1 root root 154727 Jun 4 configure | ||
-rw-r--r-- 1 root root 492 Jun 4 configure.ac | ||
lrwxrwxrwx 1 root root 32 Jun 4 depcomp -> /usr/share/automake-1.13/depcomp | ||
-rwxr-xr-x 1 root root 22250 Jun 4 hello | ||
-rw-r--r-- 1 root root 72021 Jun 4 hello-1.0.tar.gz | ||
-rw-r--r-- 1 root root 105 Jun 4 hello.cpp | ||
-rw-r--r-- 1 root root 189 Jun 4 hello.h | ||
-rw-r--r-- 1 root root 26008 Jun 4 hello.o | ||
lrwxrwxrwx 1 root root 35 Jun 4 install-sh -> /usr/share/automake-1.13/install-sh | ||
-rw-r--r-- 1 root root 23564 Jun 4 Makefile | ||
-rw-r--r-- 1 root root 79 Jun 4 Makefile.am | ||
-rw-r--r-- 1 root root 23869 Jun 4 Makefile.in | ||
lrwxrwxrwx 1 root root 32 Jun 4 missing -> /usr/share/automake-1.13/missing | ||
-rw-r--r-- 1 root root 23 Jun 4 stamp-h1 | ||
``` | ||
|
||
[![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) | ||
|
||
如果细心的话可以发现,人群中已经出现了hello-1.0.tar.gz就是将已经编译好的文件进行了打包。 | ||
|
||
|
||
|
||
转载请注明来源:https://www.cnblogs.com/bugutian/ | ||
|
||
分类: [开发基础](https://www.cnblogs.com/bugutian/category/890327.html) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
# ffprobe | ||
|
||
ffprobe是用于查看文件格式的应用程序。 | ||
详细的使用说明(英文):[http://ffmpeg.org/ffprobe.html](http://ffmpeg.org/ffprobe.html) | ||
|
||
## help | ||
``` | ||
-L 显示协议 | ||
-h/-?/-help/--help topic 帮助可以选择话题 | ||
-version 显示版本 | ||
-buildconf 展示编译配置选项 | ||
-formats 显示支持的编码 | ||
-muxers 展示支持的封装器 | ||
-demuxers 展示支持的解封装器 | ||
-devices 展示支持的设备 | ||
-codecs 展示支持的编码 | ||
-decoders 显示支持的解码器 | ||
-encoders 显示支持的编码器 | ||
-bsfs 显示支持的比特流过滤器 | ||
-protocols 展示支持的协议 | ||
-filters 展示支持的过滤器 | ||
-pix_fmts 显示支持的像素格式 | ||
-layouts 展示支持的声道格式 | ||
-sample_fmts 显示支持的采样格式 | ||
-colors 展示支持的颜色名称 | ||
-loglevel loglevel 设置日志级别 | ||
-v loglevel 设置日志级别 | ||
-report 生成报告 | ||
-max_alloc bytes 设置单个已分配块的最大大小 | ||
-cpuflags flags 指定cpu标志 | ||
-hide_banner hide_banner 不显示程序横幅 | ||
-sources device 列出源的输出设备 | ||
-sinks device 列出输出设备的接收器 | ||
-f format 指定格式 | ||
-unit 显示显示值的单位 | ||
-prefix 对显示的值使用SI前缀 | ||
-byte_binary_prefix 对字节单位使用二进制前缀 | ||
-sexagesimal 对时间单位使用六十进制格式 HOURS:MM:SS.MICROSECONDS | ||
-pretty 美化显示输出的值,让人可读 | ||
-print_format format 设置打印格式 (available formats are: default, compact, csv, flat, ini, json, xml) | ||
-of format -print_format的编码 | ||
-select_streams stream_specifier 选择指定的stream | ||
-sections 打印节结构和节信息,然后退出 | ||
-show_data 显示数据包信息 | ||
-show_data_hash 显示数据包hash值 | ||
-show_error 显示探测中的错误 | ||
-show_format 显示格式/容器信息 | ||
-show_frames 显示帧信息 | ||
-show_format_entry entry 显示格式/容器信息中的特定条目 | ||
-show_entries entry_list 显示一组指定的项 | ||
-show_log 显示log | ||
-show_packets 显示packet信息 | ||
-show_programs 显示程序信息 | ||
-show_streams 显示stream的信息 | ||
-show_chapters 显示chapters的信息 | ||
-count_frames 每个stream中的帧数 | ||
-count_packets 每个stream中的包数量 | ||
-show_program_version ffprobe的版本 | ||
-show_library_versions 库的版本 | ||
-show_versions 程序和库的版本号 | ||
-show_pixel_formats 展示像素格式描述 | ||
-show_private_data 显示私有数据 | ||
-private 和显示私有数据一样 | ||
-bitexact 强制提取bit输出 | ||
-read_intervals read_intervals 设置读取间隔 | ||
-default 默认所有选项 | ||
-i input_file 读取指定文件 | ||
-print_filename print_file 重新显示输入的文件名 | ||
-find_stream_info 读取并解码流,用启发式方法填充缺失的信息 | ||
``` |
Oops, something went wrong.