linux下使用autoconf制作Makefile
正所谓:“工欲善其事,必先利其器”。我们常用的工具主要有
GNU Automake
GNU Autoconf
GNU m4
GNU Libtool
1、查看自己系统中是否安装有这些工具
终端输入命令:which autoconf
2、如果没有装则安装
终端输入命令:sudo apt-get install autoconf
第二步:自动生成makefile的步骤
该步骤是一成不变的,需要改变的只是文件里的内容
1、运行autoscan命令
扫描源代码以搜寻普通的可移植性问题,比如检查编译器、库、头文件等,生成文件configure.scan,它是configure.ac的一个雏形。
2、将configure.scan文件重命名为configure.ac。
按照需要修改configure.ac文件configure.ac文件的内容是一些宏,confiugre.ac调用一系列autoconf宏来测试程序需要的 或用到的特性是否存在,以及这些特性的功能。这些宏经过autoconf处理后会变成检查系统特性、环境变量、软件必须的参数的shell脚本。configure.ac文件中的宏的顺序并没有规定,但是你必须在文件的最前面和最后面分别加上AC_INIT宏和AC_OUTPUT宏。
3、执行aclocal命令
aclocal是一个perl 脚本程序。aclocal根据configure.ac文件的内容,自动生成aclocal.m4文件。
4、执行autoheader命令
该命令生成config.h.in文件。该命令通常会从acconfig.h文件中复制用户附加的符号定义。
5、执行autoconf命令
有了configure.ac和aclocal.m4 两个文件以后,我们就可以使用autoconf来产生configure文件了。configure脚本能独立于autoconf运行,且在运行的过程中,不需要用户的干预。
6、在Project目录下新建Makefile.am文件
7、运行automake --add-missing命令
automake会根据Makefile.am文件产生一些文件,其中最重要的是Makefile.in文件。
8、执行configure生成Makefile。
第三步:操作示例:Hellocsk.cpp
#include <iostream>
using namespace std; int main()
{
cout<<"Hello csk"<<endl;
return ;
}
1、运行autoscan命令,生成文件列表如下
-rw-rw-r-- csk csk Nov : autoscan.log
-rw-rw-r-- csk csk Nov : configure.scan
-rw-rw-r-- csk csk Nov : Hellocsk.cpp
2、重命名configure.scan文件为configure.ac,修改configure.ac文件为如下样子
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script. AC_PREREQ([2.69])
AC_INIT(Hellocsk, 1.0, Chen_shikun@.com)
AC_CONFIG_SRCDIR([Hellocsk.cpp])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE(Hellocsk,1.0)
# Checks for programs.
AC_PROG_CXX # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions.
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
3、执行aclocal命令,生成的文件列表如下:
-rw-rw-r-- csk csk Nov : aclocal.m4
drwxr-xr-x csk csk Nov : autom4te.cache
-rw-rw-r-- csk csk Nov : autoscan.log
-rw-rw-r-- csk csk Nov : configure.ac
-rw-rw-r-- csk csk Nov : Hellocsk.cpp
4、执行autoheader命令,生成config.h.in文件,生成的文件列表如下:
-rw-rw-r-- csk csk Nov : aclocal.m4
drwxr-xr-x csk csk Nov : autom4te.cache
-rw-rw-r-- csk csk Nov : autoscan.log
-rw-rw-r-- csk csk Nov : config.h.in
-rw-rw-r-- csk csk Nov : configure.ac
-rw-rw-r-- csk csk Nov : Hellocsk.cpp
5、执行autoconf命令,生成的文件列表如下:
-rw-rw-r-- csk csk Nov : aclocal.m4
drwxr-xr-x csk csk Nov : autom4te.cache
-rw-rw-r-- csk csk Nov : autoscan.log
-rw-rw-r-- csk csk Nov : config.h.in
-rwxrwxr-x csk csk Nov : configure
-rw-rw-r-- csk csk Nov : configure.ac
-rw-rw-r-- csk csk Nov : Hellocsk.cpp
6、在Project目录下新建Makefile.am文件,Makefile.am文件的内容如下:
AUTOMARK_OPTIONS=foreign
noinst_PROGRAMS=Hellocsk
HelloWorld_SOURCES=Hellocsk.cpp
7、运行automake --add-missing命令,就会得到Makefile.in文件。生成的文件列表如下:
-rw-rw-r-- csk csk Nov : aclocal.m4
-rw-rw-r-- csk csk Nov : AUTHORS
drwxr-xr-x csk csk Nov : autom4te.cache
-rw-rw-r-- csk csk Nov : autoscan.log
-rw-rw-r-- csk csk Nov : ChangeLog
-rw-rw-r-- csk csk Nov : config.h.in
-rwxrwxr-x csk csk Nov : configure
-rw-rw-r-- csk csk Nov : configure.ac
lrwxrwxrwx csk csk Nov : COPYING -> /usr/share/automake-1.14/COPYING
lrwxrwxrwx csk csk Nov : depcomp -> /usr/share/automake-1.14/depcomp
-rw-rw-r-- csk csk Nov : Hellocsk.cpp
lrwxrwxrwx csk csk Nov : INSTALL -> /usr/share/automake-1.14/INSTALL
lrwxrwxrwx csk csk Nov : install-sh -> /usr/share/automake-1.14/install-sh
-rw-rw-r-- csk csk Nov : Makefile.am
-rw-rw-r-- csk csk Nov : Makefile.in
lrwxrwxrwx csk csk Nov : missing -> /usr/share/automake-1.14/missing
-rw-rw-r-- csk csk Nov : NEWS
-rw-rw-r-- csk csk Nov : README
如果运行automake --add-missing后出现如下提示
Makefile.am: error: required file './NEWS' not found
Makefile.am: error: required file './README' not found
Makefile.am: error: required file './AUTHORS' not found
Makefile.am: error: required file './ChangeLog' not found
则运行
touch NEWS README ChangeLog AUTHORS
8、执行configure生成Makefile
9、执行make 生成Hellocsk可执行文件
10、执行Hellocsk
csk@ubuntu:~/work/cyg/work$ ./Hellocsk
Hello csk
csk@ubuntu:~/work/cyg/work$
linux下使用autoconf制作Makefile的更多相关文章
- (转帖整理)Linux下的Autoconf和AutoMake(理论篇) 1
在搜索网上资料过程中,这是感觉最简洁有效的一篇文章,特进行转帖记录,并根据情况对部分内容进行了修改.原帖传送门:Linux下的Autoconf和AutoMake 1.工具安装在开始使用autoconf ...
- 【Linux技术】autotools制作makefile过程详解
Preface Makefile固然可以帮助make完成它的使命,但要承认的是,编写Makefile确实不是一件轻松的事,尤其对于一个较大的项目而言更是如此.那么,有没有一种轻松的手段生成Makefi ...
- 【Linux技术】autotools制作makefile过程详解【转】
转自:http://www.cnblogs.com/lcw/p/3159461.htmlPreface Makefile固然可以帮助make完成它的使命,但要承认的是,编写Makefile确实不是一件 ...
- (转)Linux下用mkisofs制作光盘镜像ISO文件
我们都知道在windows下有winiso可以将光盘制作成光盘镜像ISO文件,在linux下一个命令就搞定了.那就是mkisofs.先看看mkisofs的help. rory@dev:~$ mkiso ...
- Linux下的Make与Makefile
原文转载自:http://www.cpplive.com/html/1776.html 另外一个不错的博客http://bbs.chinaunix.net/thread-1950588-1-1.htm ...
- Linux下库的制作(静态库与共享库)
库中实际上就是已编译好的函数代码,可以被程序直接调用. Linux下的库一般的位置在/lib或者/usr/lib中 静态库 静态库是复制拷贝到调用函数中的,函数运行的时候不再需要静态库,因为静态库是在 ...
- Linux下使用autoconf 和 automake 编译简单的HelloWorld
使用过开源C/C++项目的同学都知道,标准的编译过程已经变成简单的三部曲:./configure /make/make install,使用起来很方便,不像平时自己写代码,要手写一堆复杂的makefi ...
- linux下使用vscode和makefile搭建C++开发环境
最近在linux上跑一些开源库做学习用, 顺手就搭了一下vscode的c++开发环境, 这里分享一下vscode进行C++开发的基本环境结构. 1. 首先是编辑器, vscode直接官网下载的, 后期 ...
- Linux 下安装包制作
一 Linux安装文件 Linux常见的安装为tar,zip,gz,rpm,deb,bin等.我们可以简单的分为三类, 第一:打包或压缩文件tar,zip,gz等,一般解压后即可,或者解压后运行sh文 ...
随机推荐
- 2013.4.A
=-=最近简直忙疯了.....两眼泪汪汪的...一个星期又磨磨蹭蹭的刷了一套 1.java_c 题1 Java vs C++ [问题描述] Java和C++两种语言的辩手都可以相互争论数小时去证明他们 ...
- [转]http://www.russbishop.net/xcode-exception-breakpoints
原文:http://www.russbishop.net/xcode-exception-breakpoints Many people are not aware of Xcode's powerf ...
- Windows Serer 2003 配置手册 – 创建Active Dictionary域
域与工作组的关系 实际上我们可以把域和工作组联系起来理解,在工作组上你一切的设置在本机上进行包括各种策略,用户登录也是登录在本机的,密码是放在本机的数据库来验证的.而如果你的计算机加入域的话,各种策略 ...
- 搜索广告与广告网络Demand技术-流式计算平台
流式计算平台-Storm 我们以Storm为例来看流式计算的功能是什么. 下面内容引用自大圆的博客.在Storm中,一个实时应用的计算任务被打包作为Topology发布,这同Hadoop的MapRed ...
- DDD:四色原型中Role的 “六” 种实现方式和PHP的Swoole扩展
目录 背景六种实现方式第一种:未显式体现角色的模式.第二种:使用“显式接口”显式体现角色的模式.第三种:使用“扩张方法”显式体现角色的模式.第四种:使用“领域服务”显式体现角色的模式.第五种:使用“包 ...
- jQuery EasyUI 1.3.4 离线API、Demo
[原]jQuery EasyUI 1.3.4 离线API.Demo (最新) 说明 本文下载包为 jQuery EasyUI 1.3.4 离线API.Demo. API 按照分类整理做成了离线版本 ...
- Emacs折腾经验谈
Emacs折腾经验谈 这几天都没有动力写mongodb的东西,我果然还是太懒了么~ 主要是没有一个系统的东西整理出来,加上我令人拙计的语言表达能力,这个坑只能慢慢再补了. 最近在折腾emacs这个东西 ...
- Linux中添加管理员权限问题:xxx is not in the sudoers file. This incident will be reported.
在各个不同版本的linux中添加拥有管理员权限账户有不同的简便方式. 问题: 今天遇见将新添用户添加到root用户组后,运行sudo仍然提示 ”xxx is not in the sudoers fi ...
- BCP导入导出MsSql
BCP导入导出MsSql 1.导出数据 (1).在Sql Server Management Studio中: --导出数据到tset1.txt,并指定本地数据库的用户名和密码 --这里需要指定数据库 ...
- 开始使用THREE.JS
开始使用THREE.JS 译序 Three.js是一个伟大的开源WebGL库,WebGL允许JavaScript操作GPU,在浏览器端实现真正意义的3D.但是目前这项技术还处在发展阶段,资料极为匮乏, ...