Automake使用(初级)
工程地址
https://github.com/silvermagic/automakeDev.git
最初工程目录结构
$ vim main.cpp
$ vim src/main.cpp
ls -l
total 12
drwxrwxr-x. 2 fedora fedora 4096 Jun 23 15:38 build-aux
drwxrwxr-x. 2 fedora fedora 4096 Jun 23 15:38 m4
drwxrwxr-x. 2 fedora fedora 4096 Jun 23 15:39 src
[fedora@bogon simple]$ ls -l src/
total 4
-rw-rw-r--. 1 fedora fedora 97 Jun 23 15:39 main.cpp
源文件剖析
$ cat src/main.cpp
#include <stdio.h>
#include "config.h"
int main()
{
printf("Hello world!");
return 0;
}
将工程改造成automake
运行autoscan
生成configure.scan文件,然后将此文件后缀改为.ac
$ autoscan
$ mv configure.scan configure.ac
修改configure.ac文件
后面autoconf将根据此文件生成最终的configure脚本
$ vim configure.ac
$ cat configure.ac
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
# autoconf版本
AC_PREREQ([2.69])
# 初始化包信息,将会自动生成PACKAGE_NAME、PACKAGE_VERSION、PACKAGE_BUGREPORT宏
AC_INIT([simple], [1.0], [fwdssg@gmail.com])
# 通过检测目录中必定存在的文件来判断目录是否存在
AC_CONFIG_SRCDIR([src/main.cpp])
# 生成config.h文件保存configure.ac定义的宏,此文件可被源文件包含
AC_CONFIG_HEADERS([config.h])
# 用来存储本地宏文件,.m4的文件都将被保存进此目录,acloacl命令会自动创建此目录
AC_CONFIG_MACRO_DIRS([m4])
# 用来存储一些辅助脚本文件
AC_CONFIG_AUX_DIR([build-aux])
# 初始化automake
AM_INIT_AUTOMAKE([subdir-objects -Wno-portability])
# Checks for programs.
AC_PROG_CXX
# 初始化要连接的obj目录
AC_CONFIG_LIBOBJ_DIR([src])
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
# 设置运行configure后需要生成的文件,需要编写对应的.in文件,即需要生成Makefile,则必须存在Makefile.in文件,它们将被config.status使用用来生成Makefile
AC_CONFIG_FILES([ Makefile
src/Makefile
])
AC_OUTPUT
运行aclocal
生成autoconf所需的宏文件aclocal.m4
$ aclocal
运行autoconf
根据configure.ac生成configure脚本
$ autoconf
运行autoheader
生成 config.h.in
文件,用于生成 config.h
文件,此文件保存了configure.ac中定义的宏,可被程序使用
$ autoheader
编写Makefile.am
顶层目录的Makefile.am
Makefile.am
、build-aux/gitlog-to-changelog
以及AUTHORS.in
取自Virt Viewer
,可以当做模板来使用一般情况下我们只需要根据
configure.ac
的AC_CONFIG_FILES
来修改Makefile.am
模板的SUBDIRS
来决定需要生成Makefile的子目录,每个Makefile.am只需要包含子目录即可,如果有嵌套目录需要生成Makefile,则在子目录的Makefile.am设置SUBDIRS
$ ls Makefile.am build-aux/gitlog-to-changelog AUTHORS.in
AUTHORS.in build-aux/gitlog-to-changelog Makefile.am
src目录的Makefile.am
$ git add src/Makefile.am
创建automake必要文件
COPYING
文件可以从一些开源项目下面复制过来,其他文件使用 touch
命令生成
$ ls ChangeLog AUTHORS NEWS README COPYING
AUTHORS ChangeLog COPYING NEWS README
运行automake
生成 Makefile.in
文件
$ automake -a
执行autogen.sh
autogen.sh
取自Virt Viewer
,可以当做模板来使用- 根据实际情况修改
echo "Now type 'make' to compile Gettext."
即可
$ ./autogen.sh
运行make
$ make
执行程序
$ cd src/
$ ls
main.cpp Makefile Makefile.am Makefile.in Simple Simple-main.o
$ ./Simple
Hello world!
清理环境
$ make maintainer-clean
Automake使用(初级)的更多相关文章
- 马哥linux运维初级+中级+高级 视频教程 教学视频 全套下载(近50G)
马哥linux运维初级+中级+高级 视频教程 教学视频 全套下载(近50G)目录详情:18_02_ssl协议.openssl及创建私有CA18_03_OpenSSH服务及其相关应用09_01_磁盘及文 ...
- Python 正则表达式入门(初级篇)
Python 正则表达式入门(初级篇) 本文主要为没有使用正则表达式经验的新手入门所写. 转载请写明出处 引子 首先说 正则表达式是什么? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达 ...
- python 高级之面向对象初级
python 高级之面向对象初级 本节内容 类的创建 类的构造方法 面向对象之封装 面向对象之继承 面向对象之多态 面向对象之成员 property 1.类的创建 面向对象:对函数进行分类和封装,让开 ...
- 第4月第1天 makefile automake
1. gnu make的函数调用是$,比如 $(subst ee,EE,feet on the street) 规则中“TARGETS”可以是空格分开的多个文件名 a all: echo $(subs ...
- N皇后问题—初级回溯
N皇后问题,最基础的回溯问题之一,题意简单N*N的正方形格子上放置N个皇后,任意两个皇后不能出现在同一条直线或者斜线上,求不同N对应的解. 提要:N>13时,数量庞大,初级回溯只能保证在N< ...
- python 面向对象初级篇
Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...
- codefordream 关于js初级训练
这里的初级训练相对简单,差不多都是以前知识温习. 比如输出“hello world”,直接使用console.log()就行.注释符号,“//”可以注释单行,快捷键 alt+/,"/* ...
- Mysql操作初级
Mysql操作初级 本节内容 数据库概述 数据库安装 数据库操作 数据表操作 表内容操作 1.数据库概述 数据库管理系统叫做DBMS 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建 ...
- python面向对象初级(七)
概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程最易被初学 ...
随机推荐
- 性能测试--Jmeter的Non GUI模式、集群
Jmeter的Non GUI模式.集群 一.Non GUI模式 1.一般情况下在NonGUI模式下运行jmeter,有两个好处: 节省系统资源,能够产生更大的负载 可以通过命令行参数对测试场景进行更精 ...
- 取得微信用户OpenID
公司需要微信这个平台和用户交流,于是开始研究微信公众平台.微信公众平台分为两种模式,其一是编辑模式,比如用户发什么内容,你可以响应什么内容.另外一种便是开发模式,这个模式功能丰富,不仅仅可以获取到用户 ...
- eclipse显示adb is down错误,无法真机调试
cmd进入adb目录下,运行adb kill-server 和 adb start-server还是不能正常调试时, 在360的网络连接列表中找到占用端口5037的adb.exe,全部关闭,重启ecl ...
- C++函数模板的显示调用与隐式调用
C++函数模板可以显示调用与可以隐式调用 首先定义函数模板: template <class T> inline const T& c_max (const T& a, c ...
- POJ1226 Substrings ——后缀数组 or 暴力+strstr()函数 最长公共子串
题目链接:https://vjudge.net/problem/POJ-1226 Substrings Time Limit: 1000MS Memory Limit: 10000K Total ...
- jetty使用jndi数据源
之前将项目正常的数据源统一切换成jndi访问的形式(是将c3p0以mbean形式安装到jboss做的数据连接池), 本地测试用的jetty服务器,为了统一数据库访问部分,我也查看文档找到了jetty提 ...
- VLAN虚拟局域网技术(三)-计算机网络
本文主要知识来源于学校课程,部分知识来自于H3C公司教材,未经许可,禁止转载.如需转载,请联系作者并注明出处. 本节主要介绍 pVLAN和 动态VLAN. 1. pVLAN:英文全称Private ...
- Jexus是一款Linux平台上的高性能WEB服务器和负载均衡网关
什么是Jexus Jexus是一款Linux平台上的高性能WEB服务器和负载均衡网关,以支持ASP.NET.ASP.NET CORE.PHP为特色,同时具备反向代理.入侵检测等重要功能.可以这样说,J ...
- Linux下Fork与Exec
一.引言 对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的概念之一:它执行一次却返回两个值.fork函数是Unix系统最杰出的成就之一,它是七十年代UNIX早期的开发者经过长期 ...
- Gym-101630C:Connections(生成树&构造)
题意:给定N点,M条有向边,满足任意点可以到达任意点.现在叫你保留2*N边,任然满足任意点可以到达任意点,输出删除的边. 思路:从1出发,DFS,得到一颗生成树,有N-1条边.反向建题.还是从1出发, ...