软件工程
当前位置 :首页信息技术软件工程

cygwin下进行linux c开发入门实例(Hello World)

来源: 作者: 时间:2012-06-16 点击:

一、Makefile入门简介
  Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致
工程的重新链接,但是不是所有的文件都需要重新编译,Makefile中纪录有文件的信息,在make
时会决定在链接的时候需要重新编译哪些文件。
Makefile的宗旨就是:让编译器知道要编译一个文件需要依赖其他的哪些文件。当那些依赖
文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相应的模块。
Makefile的基本结构不是很复杂,但当一个程序开发人员开始写Makefile时,经常会怀疑自
己写的是否符合惯例,而且自己写的Makefile经常和自己的开发环境相关联,当系统环境变量或
路径发生了变化后,Makefile可能还要跟着修改。这样就造成了手工书写Makefile的诸多问题,
automake恰好能很好地帮助我们解决这些问题。
使用automake,程序开发人员只需要写一些简单的含有预定义宏的文件,由autoconf根据一
个宏文件生成configure,由automake根据另一个宏文件生成Makefile.in,再使用configure依据
Makefile.in来生成一个符合惯例的Makefile。下面我们将详细介绍Makefile的automake生成方法。

二、使用的环境
本文所提到的程序是基于win32下的cygwin开发,cygwin的具体安装方法请参考网络资料。
安装时注意选择安装autoconf,automake,autobuild软件包。

三、从helloworld入手
简单地说来就是:新建三个文件:hello.c;configure.in;Makefile.am;
然后执行:autoscan; aclocal; autoconf; automake --add-missing; ./configure; make; ./helloworld
就可以看到Makefile被产生出来,而且可以将hello.c编译通过。

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

$ mkdir Hello
$ cd Hello

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

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

3、生成configure
我们使用autoscan命令来帮助我们根据目录下的源代码生成一个configure.in的模板文件。
命令:
$ autoscan
$ ls
configure.scan  hello.c

执行后在hellowrold目录下会生成一个文件:configure.scan,我们可以拿它作为configure.in的蓝本。
现在将configure.scan改名为configure.in,并且编辑它,按下面的内容修改,去掉无关的语句:

# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_INIT(hello.c)
AM_INIT_AUTOMAKE(hello, 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)

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

$ aclocal
$ ls
aclocal.m4 autom4te.cache 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既可以作为编译器的前端,也可以单独作为一个宏处理器。

4、新建Makefile.am
命令:
$ vi Makefile.am
内容如下:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=hello
hello_SOURCES=hello.c

automake会根据你写的Makefile.am来自动生成Makefile.in。
Makefile.am中定义的宏和目标,会指导automake生成指定的代码。例如,宏bin_PROGRAMS将导致编译和连接的目标被生成。

5、运行automake
命令:
$ automake --add-missing
configure.in:5: installing `./install-sh'
configure.in:5: 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 a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.exe
checking for suffix of executables... .exe
checking whether we are cross compiling... no
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

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

7、使用Makefile编译代码
命令:
$ make
gcc -DPACKAGE_NAME="" -DPACKAGE_TARNAME="" -DPACKAGE_VERSION="" -DPACKAGE_
STRING="" -DPACKAGE_BUGREPORT="" -DPACKAGE_URL="" -DPACKAGE="hello" -DVE
RSION="1.0" -I.     -g -O2 -MT hello.o -MD -MP -MF .deps/hello.Tpo -c -o hello
.o hello.c
mv -f .deps/hello.Tpo .deps/hello.Po
gcc  -g -O2   -o hello.exe hello.o

8、运行Hello World
命令:
$ ./hello
Hello World!

这样Hello World就编译出来了,你如果按上面的步骤来做的话,应该也会很容易地编译出正确的helloworld文件。

 

上一篇:
下一篇: 已经是最后一篇
最新评论共有 位网友发表了评论
发表评论
用户名: 密码: 游客发言不需要密码