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面向对象初级(七)
概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程最易被初学 ...
随机推荐
- Django创建模型_模型层
1.在项目Mysite下创建应用bms 2.在bms下的models.py文件中创建模型 from django.db import models # Create your models here. ...
- JETSON TK1~Ubuntu14.04 Armhf源更新
Ubuntu armhf版本的源网址不同于普通Ubuntu系统,如果采用如下网址会出现问题,导致sudo apt-get update出现Error. 之前的连接: deb http://archiv ...
- poj 3041 Asteroids(二分图 *【矩阵实现】【最小点覆盖==最大匹配数】)
Asteroids Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16379 Accepted: 8930 Descri ...
- sublime 相关配置和快捷键
1.安装package control 点击sublime的菜单栏 view->show console :现在打开了控制台, 这个控制台有上下两栏, 上面一栏会实时显示sublime执行了什 ...
- not in和not exist的区别(转)
in和exists in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询.一直以来认为exists比in效率高的说法是不准确的. 如果查询的两个 ...
- ECMAScript Obejct 属性操作API
Object 创建对象 我们有很多种方法创建一个对象,Object.create, Object.assign Object.create //字面量 var o = {}; // 等同于 var o ...
- codeforces 659D D. Bicycle Race(水题)
题目链接: D. Bicycle Race time limit per test 1 second memory limit per test 256 megabytes input standar ...
- create-react-app使用的问题
// 设置 npm config set registry https://registry.npm.taobao.org // 验证是否成功 npm config get registry或npm ...
- uC/OS-II源码分析(四)
内核结构 1, 临界区,OS_ENTER_CRITICAL和OS_EXIT_CRITICAL 为了处理临界区代码,必须关中断,等处理完毕后,再开中断.关中断可以避免其他任务或中断进入临界区代码.uC ...
- MySql 官方存储引擎
存储引擎是为不同的表类型处理 SQL 操作的 MySql 组件.InnoDB 是默认的.最通用的存储引擎,也是官方推荐使用的存储引擎,除非一些特定案例.MySql 5.6 中的 CREATE TABL ...