https://www.cnblogs.com/jrglinux/p/6964169.html
关键是如何写Makefile.am 其他的交给 自动工具完成
添加一个 很好的博客 学习下
https://www.cnblogs.com/lixinjie/p/a-answer-about-thread-safety-in-a-interview.html
lesson 0 什么是Autotools Automake Autotools Cmake Scons 自动创建Makefile 大型项目很难维护makefile 或者编写Makefile 所以有了自动创建Makefile的工具 Autotools 系列的工具包 包含 Autoconf Automake Libtool 工具安装 检测系统是否已经安装 which autoconf 自动安装 apt install autoconf automake libtool 需要依赖的包 ...... 手动安装 Autotools 自动创建Makefile 流程 1.生成Makefile的通用规则文件 Makefile.in 手工编写Makefile.am文件 #automake:将Makefile.am -> Makefile.in 2.生成配置脚本configure #autoscan:生成configure.scan ——>congfigure.ac 修改 配置文件configure.ac #aclocal:生成aclocal.m4,存放autoconf运行需要的宏 #autoheader :生成 config.h.in #autoconf:将configure.ac ——>configure 3.通过configure生成Makefile #./configure: Makefile.in ——> Makefile #make ; make install 实战 运行 #autoscan mv configure.scan configure.ac vim configure.ac AC_PREREQ([2.69]) AC_INIT(mp3 , 1.0, zhangkele.cc )//修改的信息 发布版本信息 AC_CONFIG_SRCDIR([hello.c]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE//添加进来的 AC_OUTPUT(Makefile)//添加生成什么文件 这里就叫Makefile #aclocal #autoheader 产生 config.h.in #autoconf 产生了 configure 继续 手动创建 Makefile.am 进行手工编写如下内容 保存 AUTOMAKE_OPTIONS = foreign bin_PROGRAMS = mp3 mp3_SOURCES = hello.c # automake --add-missing 执行这个命令 帮助自动添加缺少的文件并且通过Makefile.am产生了Makefile.in #./configure 执行这个命令利用Makefile.in 产生了Makefile #make 执行了结束产生了 我们需要的 可执行文件 mp3 了 #make install 执行这个命令 就代表着将这个可执行文件mp3安装到系统中了 便可以直接输入执行文件名mp3 直接运行了 #make uninstall 执行这个命令就是卸载 上面安装的文件 注意要在安装的目录执行这个命令 #make clean #make distclean 执行这两个命令就不要讲了吧 都是清理一些东西 lesson1 使用Autotools宏、变量配置flat目录的Makefile 软件目录的结构 Makefile.am语法 Configure.ac宏 目录结构 Flat 所有文件都存放在同一个目录下面 Shallow 主出现源文件存放在顶层目录中 各个模块文件放在各个子目录中 Deep 所有源文件都存放在各个子目录中 Automake的宏、变量说明 文件编译类型 说明 _PROGRAMS 表示生成目标是可执行文件 _LIBRARIES 生成目标为库文件 _LTLIBRARISE 使用LIBTOOL生成库文件 _HEADERS 头文件 _DATA 数据文件、配置文件 编译配置 说明 _SOURCES 目标依赖的源文件 _LIBADD 生成库时需要链接的其他库 _LDADD 链接需要的链接的库 _LDFLAGS 链接选项:-I /-L/-shared/-fPIC _LIBTOOLFLAGS Libtool编译选项 路径变量 值 bindir $(prefix)/bin libdir $(prefix)/lib datadir $(prefix)/share sysconfdir $(prefix)/etc includedir $(prefix)/include $(top_srcdir) 工程顶目录 $(top_builddir) 目标文件顶层目录 noinst 不安装 其他变量 说明 INCLUDES 链接所需要的头文件 SUBDIRS 传递处理子目录 EXTRA_DIST 打包文件或目录 Makefile.am书写示范 百度吧!!! Makefile.am语法 主要有宏、变量组成 各个变量定义生成需要被编译 连接的目标 依赖源文件 需要安装的目录等 工具automake根据这些目标和源文件添加规则,生成makefiel.in 少量的makefile语法 注释 注释使用##表示,不会被输出到Makefile.in 在makefile.am 定义的makefile代码将被添加到makefile.in的合适位置
按照笔记来干 就可以了 很easy 不多说