生成Makefile文件全过程
【1】生成Makefile文件全过程
整体流程如下图:
注意:以下文件根目录为testmake(任意位置新建即可)
(1)测试程序
1.1 建立两个目录:mkdir include source
1.2 编辑sum.h文件
#cd include
#vim sum.h
内容如下:
#include <stdio.h>
int sum(int a, int b);
1.3 编辑sum.c文件
#cd source
#vim sum.c
内容如下:
#include "sum.h" int sum(int a, int b)
{
printf("\n----PRINT ARGS A: ----\n%d\n", a);
printf("\n----PRINT ARGS B: ----\n%d\n", b);
return (a + b);
} int main(int argc , char **argv)
{
int a = , b = ;
printf("Please INPUT ARGS A and B end by [ENTER]\n");
scanf("%d%d", &a, &b);
int value = sum(a, b);
printf("Execute SUM result: \n%d\n", value);
return ;
}
(2)autoscan
首先,执行autoscan命令,会生成autoscan.log 和 configure.scan两个文件,如下图:
然后,重命名并修改configure.scan文件
cp configure.scan configure.ac
修改内容详见注释部分:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script. AC_PREREQ([2.63])
# 修改点[]
# AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
# 修改后:
# FULL-PACKAGE-NAME 为程序名称,VERSION为当前版本, BUG-REPORT-ADDRESS为bug汇报地址
AC_INIT(sum, 1.0., kaizen@.com)
# 修改点[] 增加一行如下:
AM_INIT_AUTOMAKE AC_CONFIG_SRCDIR([source/sum.c])
#AC_CONFIG_HEADERS([config.h]) # Checks for programs.
AC_PROG_CC # 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
利用configure.ac文件,执行命令aclocal,会生成aclocal.m4 和 autom4te.cache两个文件,如下图:
重要的是aclocal.m4文件
(4)autoconf
利用aclocal.m4文件,执行命令autoconf,会生成configure文件,如下图:
(5)编写Makefile.am文件
内容如下:
#Makefile.am
bin_PROGRAMS = sum
sum_SOURCES = include/sum.h source/sum.c
sum_CPPFLAGS = -I include/
注意:sum为程序命名
如果将sum更改为demo,那么下面两个参数的前缀也需要对应更新,示例:
demo_SOURCES
demo_CPPFLAGS
(6)automake
首先,明确automake必需文件(9个)为:
install-sh
missing
INSTALL
NEWS
README
AUTHORS
ChangeLog
COPYING
depcomp
其中,命令automake -a会自动生成以下(5个)文件:
install-sh
missing
INSTALL
COPYING
depcomp
如下图:
然后,其他(4个)文件手动生成,命令:
touch NEWS README AUTHORS ChangeLog
如下图:
以上准备就绪。最后再执行automake命令,会生成Makefile.in文件,如下图:
(7)./configure
configure命令,利用configure和Makefile.in文件,生成Makefile文件。
(8)make
此时已经生成了sum(可执行文件名字在前面编写Makefile.am的参数时确定)这个,可以通过./sum直接看到运行结果。
如下图:
不过linux系统中一般这里都会再做一步,把它安装到系统里面,这样我们只要在终端输入sum就可以运行程序。
(9)make install
OK。现在直接可以在终端运行程序。如下图:
Good Good Study, Day Day Up.
顺序 选择 循环 总结
生成Makefile文件全过程的更多相关文章
- 利用 autoconf 和 automake 生成 Makefile 文件
一.相关概念的介绍 什么是 Makefile?怎么书写 Makefile?竟然有工具可以自动生成 Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚. 1.M ...
- linux下使用automake工具自动生成makefile文件
linux环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU的计划中,设计出了一种叫做Autoconf/Au ...
- 使用automake等命令自动生成Makefile文件 (转载)
使用automake等命令自动生成Makefile文件 Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多.好在Lin ...
- 利用qmake生成Makefile文件
在linux下写程序,免不了要写Makefile文件,用automake,总感觉比较麻烦,linux人喜欢做麻烦的事,以显得风格迥异. 其实用qmake生成Makefile文件相当简单. 1 装好qm ...
- 例解 autoconf 和 automake 生成 Makefile 文件
本文介绍了在 linux 系统中,通过 Gnu autoconf 和 automake 生成 Makefile 的方法.主要探讨了生成 Makefile 的来龙去脉及其机理,接着详细介绍了配置 Con ...
- 使用autoconf和automake生成Makefile文件(转)
Makefile好难写 曾经也总结了一篇关于Makefile的文章<make和makefile的简单学习>.但是,总结完以后,发现写Makefile真的是一件非常痛苦的事情,的确非常痛苦. ...
- 自动生成Makefile文件
主要的工具有autoscan, aclocal, autoheader, autoconfig,automake 1 .创建c源文件hello.c #include <stdio.h> i ...
- 生成makefile文件编译源文件
1.利用CodeBlock的cbp文件生成makefile文件 reverse@ubuntu:~/Desktop/CreateMakeFile$ ls cbp2make.linux-x86 freeg ...
- 使用autoconf与automake自动生成MakeFile文件
automake主要通过编辑Makefile.am来控制它的行为,下面就常用的三个Makefile.am配置做出说明. 1.1. autotools的工作原理 autotools最终是为了生成Make ...
随机推荐
- EHLIB 安装方法
Ehlib安装方法 路人甲 2010-05-05 23:01:37 安装文件自带的Readme.txt中的安装过程如下: 1. Delphi 5.x - 7.x, Delphi 9.X Win32, ...
- 结合 Vue.observable 写一个简易 Vuex
作为 Vue 全家桶的一员,Vuex 的重要性不言而喻,不管是用来管理状态,还是封装 Controler 都很好用 不过在一些体量较小的项目中,为了几个简单的状态或者处理函数而引入 Vuex,就像是高 ...
- Android 9.0网络权限适配
在做Android开发时,使用华为的p20和平板(均为Android 9.0)测试时,发现不能使用WIFI网络,一番郁闷纠结查找后 直接上方法: 在res文件夹下创建xml文件夹,在xml里面创建文件 ...
- NameNode && Secondary NameNode工作机制
NameNode && Secondary NameNode工作机制 1)工作流程 2) fsimage和edits NameNode是HDFS的大脑,它维护着整个文件系统的目录树, ...
- Flask 中内置的 Session 应用
目录 1.Flask 中 session 是需要 secret_key 的 2.session抛异常 3.session 用法: 4.验证session Flask中的Session非常的奇怪,他会将 ...
- [转]【HttpServlet】HttpServletResponse接口 案例:完成文件下载
创建时间:6.19 & 6.24 1.案例-完成文件下载 1) 什么情况下会文件下载? 浏览器不能解析的文件就下载 *使用a标签直接指向服务器上的资源 2)什么情况下需要在服务端编写文件下载 ...
- Python并发编程内容回顾
Python并发编程内容回顾 并发编程小结 目录 • 一.到底什么是线程?什么是进程? • 二.Python多线程情况下: • 三.Python多进程的情况下: • 四.为什么有这把GIL锁? • 五 ...
- [codevs2460]树的统计
题目描述 Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHAN ...
- LeetCode 1123. Lowest Common Ancestor of Deepest Leaves
原题链接在这里:https://leetcode.com/problems/lowest-common-ancestor-of-deepest-leaves/ 题目: Given a rooted b ...
- [RN] React Native 中使用 stickyHeaderIndices 实现 ScrollView 的吸顶效果
React Native中,ScrollView组件可以使用 stickyHeaderIndices 轻松实现 sticky 效果. 例如下面代码中: <ScrollView showsVert ...