首先来说一个比较简单的编译Linux下C++的方法。

我们在文本编辑器里写一个C的简单的程序(好像所有学习C或者C++的书都会出现)
代码:

#include <stdio.h>
int main()
{
    printf("Hello,World!\n");
    return 0;
}

现在存盘为Hello.c,打开你的终端,并在文件当前目录输入:
代码:

g++ Hello.c -o hello

编译时可能会出现如下警告:no newline at and of file ,只有在文件结尾添加一个新行就好了。
然后在终端中输入 ./hello ,你就能在终端中看到程序运行结果了

如果一个项目中存在N多个.c文件,那么就要用到Makefile了。

现在开始介绍详细的过程:

1 、建目录

在你的工作目录下建一个helloworld 目录,我们用它来存放helloworld 程序及相关文件,如在/home/my/build下:

$ mkdir helloword
$ cd helloworld

2 、 helloworld.c

然后用你自己最喜欢的编辑器写一个hellowrold.c 文件,如命令:vi helloworld.c 。使用下面的代码作为helloworld.c 的内容。

int main(int argc, char** argv)
{
printf("Hello, Linux World!\n");
return 0;
}

完成后保存退出。

现在在helloworld 目录下就应该有一个你自己写的helloworld.c 了。

3 、生成configure

我们使用autoscan 命令来帮助我们根据目录下的源代码生成一个configure.in 的模板文件。

命令:

$ autoscan
$ ls
configure.scan helloworld.c

执行后在hellowrold 目录下会生成一个文件:configure.scan ,我们可以拿它作为configure.in 的蓝本。

现在将configure.scan 改名为configure.in ,并且编辑它,按下面的内容修改,去掉无关的语句:

============================configure.in 内容开始=========================================
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_INIT(helloworld.c)
AM_INIT_AUTOMAKE(helloworld, 1.0)

# 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_OUTPUT(Makefile)
============================configure.in 内容结束=========================================

然后执行命令aclocal 和autoconf ,分别会产生aclocal.m4 及configure 两个文件:

$ aclocal
$ls
aclocal.m4 configure.in helloworld.c
$ autoconf
$ ls
aclocal.m4 autom4te.cache configure configure.in helloworld.c

大家可以看到configure.in 内容是一些宏定义,这些宏经autoconf 处理后会变成检查系统特性、环境变量、软件必须的参数的shell 脚本。

autoconf 是用来生成自动配置软件源代码脚本(configure )的工具。configure 脚本能独立于autoconf 运行,且在运行的过程中,不需要用户的干预。

要生成configure 文件,你必须告诉autoconf 如何找到你所用的宏。方式是使用aclocal 程序来生成你的aclocal.m4。

aclocal 根据configure.in 文件的内容,自动生成aclocal.m4 文件。aclocal 是一个perl 脚本程序,它的定义是:“aclocal - create aclocal.m4 by scanning configure.ac” 。

autoconf 从configure.in 这个列举编译软件时所需要各种参数的模板文件中创建configure 。

autoconf 需要GNU m4 宏处理器来处理aclocal.m4 ,生成configure 脚本。

m4 是一个宏处理器。将输入拷贝到输出,同时将宏展开。宏可以是内嵌的,也可以是用户定义的。除了可以展开宏,m4 还有一些内建的函数,用来引用文件,执行命令,整数运算,文本操作,循环等。m4 既可以作为编译器的前端,也可以单独作为一个宏处理器。

注:这里需要加上一点

【**@linux hello】 $ touch NEWS README AUTHORS ChangeLog用于生成相关文件

4 、新建Makefile.am

新建Makefile.am 文件,命令:

$ vi Makefile.am

内容如下:

AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=helloworld
helloworld_SOURCES=helloworld.c

automake 会根据你写的Makefile.am 来自动生成Makefile.in 。

Makefile.am 中定义的宏和目标, 会指导automake 生成指定的代码。例如,宏bin_PROGRAMS 将导致编译和连接的目标被生成。

5 、运行automake

命令:

$ automake --add-missing
configure.in: installing `./install-sh'
configure.in: installing `./mkinstalldirs'
configure.in: installing `./missing'
Makefile.am: installing `./depcomp'

automake 会根据Makefile.am 文件产生一些文件,包含最重要的Makefile.in 。

6 、执行configure 生成Makefile

$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking for C compiler default output... 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 ANSI C... 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
$ ls -l Makefile
-rw-rw-r-- 1 yutao yutao 15035 Oct 15 10:40 Makefile

你可以看到,此时Makefile 已经产生出来了。

7 、使用Makefile 编译代码

$ make
if gcc -DPACKAGE_NAME="" -DPACKAGE_TARNAME="" -DPACKAGE_VERSION="" -

DPACKAGE_STRING="" -DPACKAGE_BUGREPORT="" -DPACKAGE="helloworld" -DVERSION="1.0"

-I. -I. -g -O2 -MT helloworld.o -MD -MP -MF ".deps/helloworld.Tpo" \
-c -o helloworld.o `test -f 'helloworld.c' || echo './'`helloworld.c; \
then mv -f ".deps/helloworld.Tpo" ".deps/helloworld.Po"; \
else rm -f ".deps/helloworld.Tpo"; exit 1; \
fi
gcc -g -O2 -o helloworld helloworld.o

运行helloworld

$ ./helloworld
Hello, Linux World!

PS:如果是C++文件,可以执行如下命令

【**@linux】 $ vi Makefile

然后找到CC这个字段,将其值改为g++就OK了

vi下Makefile的自动生成相关推荐

  1. Linux下Makefile的automake生成全攻略(转)

    Linux下Makefile的automake生成全攻略(转)[@more@] 文/余涛 作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便 ...

  2. 利用模板将指定目录下的所有图片自动生成含多个分页的图片静态网页

    先看一下最后得到的效果,见这里:北京2008奥运会开幕式精彩图片--精美得让你难以置信的160张,强烈的心灵震撼(http://www.cncctv.com/oyphoto/OyPhoto01.htm ...

  3. Linux下Makefile的automake生成全攻略--转

    http://www.yesky.com/120/1865620.shtml 作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下 ...

  4. Linux下Makefile的automake生成全攻略

    From: http://fanqiang.chinaunix.net/system/linux/2005-12-14/3926.shtml 作为Linux下的程序开发人员,大家一定都遇到过Makef ...

  5. Linux下Makefile的automake生成全攻略[zz]

    By harry on Jan 18, 2008 文/余涛 (http://www.yesky.com/120/1865620.shtml) 作为Linux下的程序开发人员,大家一定都遇到过Makef ...

  6. Makefile 7——自动生成依赖关系 三颗星

    后面会介绍gcc获得源文件依赖的方法,gcc这个功能就是为make而存在的.我们采用gcc的-MM选项结合sed命令.使用sed进行替换的目的是为了在目标名前加上"objs/"前缀 ...

  7. Makefile之自动生成依赖(8)

    Makefile自动生成头文件依赖是很常用的功能,本文的目的是想尽量详细说明其中的原理和过程. Makefile模板 首先给出一个本人在小项目中常用的Makefile模板,支持自动生成头文件依赖. C ...

  8. Makefile文件自动生成,ubuntu系统autotools使用

    多目录项目用automake和autoconf自动生成Makefile方法 在Linux系统下编写代码,基本上都会遇到Makefile的使用,虽说它对于工程管理有很方便的作用,但对初学者来说要编写出自 ...

  9. cad求和插件_黑科技 | 无BIM建模下平面CAD自动生成门窗表

    如果你接到的施工图既不是用天正出的,也不是用revit出的,还得统计门窗表,那么你需要读完这篇文章. 为了能够让自己和所有底层同行们从这项无脑又烧脑的机械劳动中解脱,C君近期利用茶余饭后的时间开发了一 ...

最新文章

  1. TLB的作用及工作原理
  2. 线程的CloseHandle和WaitForSingleObject
  3. 十天学会ASP.net
  4. linux下Mplayer安装与设置指南(以及如何加载显示中文字幕)
  5. 数据结构与算法笔记(七)—— 选择排序
  6. Hyperledger Fabric 私有数据(1)概念
  7. Stanford 研究领域
  8. 【ASP.NET】服务器控件大演练与实例分析
  9. OSPF——STUB区域及完全STUB区域详解
  10. 浏览器屏蔽flash视频广告
  11. [Java 基础]控制语句
  12. 解决办法:syslinux:Accessing physical drive
  13. java基础回顾---static关键字
  14. linux下gpt分区,Linux下的GPT分区
  15. C#发送邮件并抄送给多个邮件接收者的代码
  16. 【转载】Shell图形化监控网络流量
  17. 使用 EPUB 制作数字图书(转发)
  18. 大数据处理过程之核心技术ETL详解
  19. 不知道如何裁剪视频画面尺寸?这篇文章告诉你如何视频裁剪画面
  20. java widget_Java FavoritesWidget类代码示例

热门文章

  1. 【锻体篇-硬件开发】TL431可控精密稳压源的应用和注意事项
  2. 量子计算机没有热量,最新研究:量子气体不会带走热量
  3. 安徽建筑大学计算机技术909数据结构
  4. win10 关闭微软 Egde 浏览器后台
  5. 如何防止木马病毒盗窃QQ密码?
  6. android之NFC基础技术分享
  7. 微信的新消息一键标为已读.简单的微信脚本,使用autojs编写的安卓自动化脚本
  8. 零基础小白必备PS抠图技巧
  9. 用java将数组中的数字倒过来_有数组a[n],用java 代码将数组元素顺序颠倒
  10. Zookeeper报错:Unable to read additional data from server sessionid 0x