`
omygege
  • 浏览: 1386732 次
文章分类
社区版块
存档分类
最新评论

没有makefile的日子

 
阅读更多

1.没有makefile的日子

2.参考资料及代码下载

<1>. 没有makefile的日子

[上一篇]中介绍了makefile的编写规则,第一个标题是“没有makefile的日子”,收到[博客园]的网友zhuangzhuang1988的回复可以使用automake来自动生成makefile。如果在linux下从源代码安装过程序的话,通常的过程是这样:

./configure; make; make install

下面我们将试图如何生成这种发行版本,这里面主要使用到了aclocal, automake等工具。

1. 现在假设程序源代码已经编写完成,这里是main.c

xuqiang@ubuntu:~/automake/helloworld$ ls

main.c
xuqiang@ubuntu:~/automake/helloworld$ cat main.c
#include <stdio.h>
int main()
{
printf("hello linux world !");
return 0;
}

2. 运行autoscan,此时将生成autoscan.log,configure.scan两个文件。

xuqiang@ubuntu:~/automake/helloworld$ autoscan

xuqiang@ubuntu:~/automake/helloworld$ ls
autoscan.log configure.scan main.c

3. 我们将configure.scan作为configure.in文件的模板,以供aclocal来使用。首先将configure.scan改名为configure.in

xuqiang@ubuntu:~/automake/helloworld$ mv configure.scan configure.in

修改configure.in件:

xuqiang@ubuntu:~/automake/helloworld$ vim configure.in

xuqiang@ubuntu:~/automake/helloworld$ cat configure.in
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.63])
AC_INIT([helloauto], [1.0], [xuqiang@gmail.com])
AC_CONFIG_SRCDIR([main.c])
# comment this line, no use
# 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.
# init automake
AM_INIT_AUTOMAKE(helloauto, 1.0)
# write out the makefile
AC_OUTPUT(Makefile)
4. 执行aclocal命令,生成aclocal.m4 autom4te.cache两个文件
xuqiang@ubuntu:~/automake/helloworld$ aclocal
xuqiang@ubuntu:~/automake/helloworld$ ls
aclocal.m4 autom4te.cache autoscan.log configure.in main.c

5. 运行autoconf命令,将生成configure文件。

xuqiang@ubuntu:~/automake/helloworld$ autoconf

xuqiang@ubuntu:~/automake/helloworld$ ls
aclocal.m4 autom4te.cache autoscan.log configure configure.in main.c
6. 新建Makefile.am文件,该文件是工具automake的依赖文件。

xuqiang@ubuntu:~/automake/helloworld$ vim Makefile.am

xuqiang@ubuntu:~/automake/helloworld$ cat Makefile.am
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=helloauto
helloauto_SOURCES=main.c
7. 运行automake命令,该命令将在该源文件目录中增加所需脚本,例如INSTALL文件等。
xuqiang@ubuntu:~/automake/helloworld$ automake --add-missing
Makefile.am: installing `./INSTALL'
Makefile.am: required file `./NEWS' not found
Makefile.am: required file `./README' not found
Makefile.am: required file `./AUTHORS' not found
Makefile.am: required file `./ChangeLog' not found
Makefile.am: installing `./COPYING' using GNU General Public License v3 file
Makefile.am: Consider adding the COPYING file to the version control system
Makefile.am: for your code, to avoid questions about which license your project uses.
xuqiang@ubuntu:~/automake/helloworld$ ls
aclocal.m4 autoscan.log config.status configure.in INSTALL Makefile.am
autom4te.cache config.log configure COPYING main.c Makefile.in

8. 下面开始测试一下上面生成的文件。

xuqiang@ubuntu:~/automake/helloworld$./configure

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
configure: creating ./config.status
config.status: creating Makefile
config.status: executing depfiles commands
xuqiang@ubuntu:~/automake/helloworld$make
gcc -DPACKAGE_NAME=/"helloauto/" -DPACKAGE_TARNAME=/"helloauto/" -DPACKAGE_VERSION=/"1.0/" -DPACKAGE_STRING=/"helloauto/ 1.0/" -DPACKAGE_BUGREPORT=/"xuqiang@gmail.com/" -DPACKAGE=/"helloauto/" -DVERSION=/"1.0/" -I. -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c
mv -f .deps/main.Tpo .deps/main.Po
gcc -g -O2 -o helloauto main.o
xuqiang@ubuntu:~/automake/helloworld$ls
aclocal.m4 config.log configure.in INSTALL Makefile
autom4te.cache config.status COPYING main.c Makefile.am
autoscan.log configure helloauto main.o Makefile.in
xuqiang@ubuntu:~/automake/helloworld$./helloauto
hello linux world !xuqiang@ubuntu:~/automake/helloworld$

通过使用这些工具,只要编写简单的几个文件就能生成Makefile,编译源代码。

<2>. 参考资料及代码下载

IBM例解 autoconf 和 automake 生成 Makefile 文件

Linux下Makefile的automake生成全攻略

A tutorial for porting to autoconf & automake

/Files/xuqiang/helloautomake.rar

1. 本博客中的文章均是个人在学习和项目开发中总结。其中难免存在不足之处 ,欢迎留言指正。 2. 本文版权归作者和博客园共有,转载时,请保留本文链接。


分享到:
评论

相关推荐

    Makefile进阶 Makefile进阶

    1. **宏定义**:在这个例子中并没有明确给出宏定义,但可以通过添加 `LIB_PATH` 宏来简化路径配置。宏定义可以提高 Makefile 的灵活性和可维护性。例如: ```make LIB_PATH = /path/to/library ``` 2. **目标和...

    Makefile 中文教程.pdf

    Makefile 中文教程.pdf Makefile 作为一个自动化编译工具,在软件开发过程中扮演着非常重要的角色。Makefile 的主要作用是根据源代码文件生成目标文件,实现自动化编译和链接的过程。 Makefile 的基本概念 ...

    makefile基础知识.pdf

    "makefile基础知识" Makefile 是一种自动化编译工具,常用于大型开发项目的管理和维护。它可以将复杂的开发项目分解成多个易于管理的模块,並高效地处理源文件之间的复杂关系。 Makefile 的主要功能是描述源程序...

    codeblocks工程转makefile

    转换后的`makefile`能够被`make`命令解析并执行编译任务,这对于理解项目结构、自动化构建或在没有CodeBlocks的环境中编译项目非常有用。 描述中提到,转换支持单个工程转换和工作区转换。单个工程转换通常涉及一个...

    Makefile实战.pdf

    Makefile 实战详解 Makefile 是一个非常重要的工具,在软件开发过程中扮演着非常关键的角色。Makefile 的主要作用是告诉 make 程序如何将源代码编译成可执行文件。Makefile 的好坏直接影响着项目的开发效率,一个好...

    Makefile手册_中文版.pdf

    它还涵盖了如何在目录中搜寻依赖、定义假想目标、处理没有命令或依赖的规则以及如何使用空目录文件记录事件。手册还介绍了一些内建的特殊目标名和具有多目标或多规则目标的写法,以及静态格式规则和双冒号规则的使用...

    Makefile 多目录编译Demo

    在编程世界中,Makefile是一个极其重要的工具,它允许开发者自动化构建项目,特别是当项目包含多个目录和大量源代码文件时。"Makefile 多目录编译Demo"着重讲解了如何在复杂的项目结构中有效利用Makefile进行编译。...

    韦东山通用Makefile文件

    本程序的Makefile分为3类: 1. 顶层目录的Makefile 2. 顶层目录的Makefile.build 3. 各级子目录的Makefile 一、各级子目录的Makefile: 它最简单,形式如下: EXTRA_CFLAGS := CFLAGS_file.o := obj...

    跟我一起学Makefile.pdf

    跟我一起学Makefile.pdf Makefile是嵌入式工程师开发必备的经典教程,以下是从文件中提取的相关知识点: 1. 关于程序的编译和链接:Makefile的主要作用是自动化编译和链接过程,使得开发者可以更方便地管理项目。 ...

    Makefile自动构建方法

    ### Makefile自动构建方法 #### 一、概述 在Linux平台下,Makefile是一种非常重要的自动化构建工具,它能够帮助开发者高效地管理项目构建过程。本文档将详细介绍如何使用Makefile进行自动构建,并通过一个简单的...

    跟我一起写makefile.pdf

    Makefile编译和链接基础知识 Makefile是 Unix 和 Unix-like 操作系统中一种工具,用于自动编译和链接程序。Makefile 文件中包含了一系列规则,指定了编译和链接的过程。下面将详细介绍 Makefile 的基本概念和使用...

    uClinux中的makefile

    在嵌入式系统开发领域,uClinux是一款广受欢迎的实时操作系统,它专为没有MMU(内存管理单元)的微处理器设计。在这个场景下,理解并掌握如何编写和使用makefile至关重要,因为makefile是构建软件项目的核心工具,它...

    Makefile写法及自动化工具

    Makefile是Unix/Linux环境下用于自动化构建、编译和链接程序的重要工具。它允许开发者通过定义一系列规则来指示编译过程,从而极大地简化了大型项目中管理多个源文件的复杂性。在【标题】"Makefile写法及自动化工具...

    Makefile 的编写指导

    ### Makefile 的编写指导 #### 概述 Makefile 是一种用于自动化编译流程的脚本文件,在 Unix 和类 Unix 系统中广泛使用。它不仅适用于 C/C++ 项目,也适用于其他语言项目的编译过程。对于大型项目而言,合理地组织...

    跟我一起学Makefile

    《跟我一起学Makefile》是针对Linux环境下的Makefile编写技术进行深入讲解的资源集合,旨在帮助初学者和开发者快速理解和掌握Makefile的编写规则与技巧。Makefile在软件开发中扮演着重要的角色,它是自动化构建工具...

    Makefile

    ### Makefile核心概念与应用详解 #### 一、Makefile概览 Makefile,作为自动化构建脚本的核心,被广泛应用于软件开发中的编译、链接等任务自动化处理。其核心功能在于通过预定义的规则自动识别文件依赖关系,并...

    makefile v3.8中文手册

    标题中提到的“makefile v3.8中文手册”指的是GNU make的版本3.8的中文手册。GNU make是一个用于编译和构建大型软件项目,特别是C和C++项目的自动化工具。它读取一个名为Makefile的文件,该文件指明了项目中哪些文件...

    makefile document

    ### Makefile概述与核心知识点 #### 一、Makefile的重要性及背景 Makefile是一种用于自动化构建过程的脚本文件,广泛应用于软件开发领域。对于许多软件工程师而言,掌握Makefile的编写技巧至关重要,尤其是在Unix/...

    makefile详解中文版-详细描写makefile语法

    Makefile 详解中文版 Makefile 是一种自动构建工具,广泛应用于 Unix 和 Linux 系统中。GNU Make 是一个功能强大且广泛使用的 Make 实现,提供了详细的文档和手册。下面是 Makefile 的详细解释: Make 概述 Make...

Global site tag (gtag.js) - Google Analytics