生成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 ...
随机推荐
- 来自数组原型 Array.prototype 的遍历函数
1. Array.prototype.forEach() forEach() 是一个专为遍历数组而生的方法,它没有返回值,也不会改变原数组,只是简单粗暴的将数组遍历一次 参数: callback() ...
- Linux的基本指令(2)-Linux从入门到精通第三天(非原创)
文章大纲 一.高级指令二.练习题三.学习资料下载四.参考文章 一.高级指令 1. hostname指令 作用:操作服务器的主机名(读取.设置)语法1:#hostname 含义:表示输出完整的主机名 ...
- 面向对象(五)--isinstance与issubclass方法、反射、内置方法(部分)、异常处理
一.isinstance与issubclass方法 1.isinstance是用来判断对象是否是某个类 isinstance(obj,class) 2.issubclass是用来判断一个类是否为另一个 ...
- Github清除历史提交,保留最新提交
有时候,需要启动一个新的分支,同时想摒弃历史信息,那么可以使用下面的方法来实现 #克隆git仓库 git clone [URL] #进入git仓库 cd [仓库名] #创建一个名为 new_branc ...
- windows定期删除文件
:: 定时清理客户端上传导入包文件 @echo off title 清理客户端上传导入包文件 :: 导入包文件目录 set log_dir="F:\http\uploadzip\web\ht ...
- Redis开启远程访问及密码
一.开启远程访问 1.开放端口 firewall-cmd --zone=public --add-port=6379 firewall-cmd --zone=public --add-port=637 ...
- 编程语言及python介绍
编程语言及python介绍 1.编程语言分类 机器语言 优点:执行效率高 缺点:开发效率极低,跨平台性差 汇编语言 优点:较机器语言执行效率稍低 缺点:较机器语言开发效率稍高,仍然很低,跨平台性差 高 ...
- windows命令行模式打开目录
cmd命令行里面,打开当前目录方式如下: explorer .
- 排序算法-桶排序(Java)
package com.rao.sort; import java.util.*; /** * @author Srao * @className BucketSort * @date 2019/12 ...
- 浅谈C/C++回调函数(Callback)& 函数指针
摘要:回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是 ...