linux automake
linux下写程序,编译程序,熟练了也是很惬意的事,但总有不熟练的时候,那就是总觉得什么都麻烦。比如说写Makefile文件。写Makefile文件,文件一多自然是个体力活。于是有了automake这个工具。下面介绍下如何使用此工具。网上文章已经有很多,不过大多是单目录下的,或是多目录但又是基于库形式的编译,可实际情况,有时候我们并不需要库,只是想编译个程序出来而已。于是详说之。 条件:没有
linux下写程序,编译程序,熟练了也是很惬意的事,但总有不熟练的时候,那就是总觉得什么都麻烦。比如说写Makefile文件。写Makefile文件,文件一多自然是个体力活。于是有了automake这个工具。下面介绍下如何使用此工具。网上文章已经有很多,不过大多是单目录下的,或是多目录但又是基于库形式的编译,可实际情况,有时候我们并不需要库,只是想编译个程序出来而已。于是详说之。
条件:没有安装automake,请先装之。
源码目录结构:
-- src
|-- logic
| |-- logic.c
| `-- logic.h
|-- main
| `-- main.c
`-- ui
|-- ui.c
`-- ui.h
main目录下的main.c调用logic和ui目录下的相关函数。
main.c代码
#include <stdio.h>
#include "ui.h"
#include "logic.h"
int main(int argc, char *argv[])
{
int a;
a = com_add(1, 3);
printf("a = %d\n", a);
show_window("this is a test");
return 0;
}
logic.c的代码
#include "logic.h"
int com_add(int a, int b)
{
return a*a + b*b;
}
logic.h的代码
#ifndef __LOGIC_H
#define __LOGIC_H
int com_add(int a, int b);
#endif
ui.c的代码
#include <stdio.h>
#include "ui.h"
void show_window(char *title)
{
if (title){
printf("%s\n", title);
}
}
ui.h的代码
#ifndef __UI_H
#define __UI_H
void show_window(char *title);
#endif
--------------------------------
步骤1 autoscan
在src目录下运行autoscan命令,目录下生成两个文件autoscan.log configure.scan。将configure.scan重命名为configure.in。并进行编辑。
configure.in原内容为:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.65])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([main/main.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_OUTPUT
修改其中内容如下:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.65])
AC_INIT(maxwell, 0.1, askeyes@csdn.net)
AC_CONFIG_SRCDIR([main/main.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE(maxwell,0.1)
# 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)
其中AM_INIT_AUTOMAKE(maxwell,0.1)是为关键,表明将用automake生成Makefile文件。
步骤2 aclocal
在src目录下运行aclocal命令。此时会生成aclocal.m4和autom4te.cache目录。
步骤3 autoconf
在src目录下运行autoconf命令,生成autoscan.log configure
步骤4 autoheader
在src目录下运行autoheader命令,生成config.h.in
步骤5 创建Makefile.am文件
在src目录下创建Makefile.am文件,内容下:
AUTOMAKE_OPTIONS = foreign
bin_PROGRAMS= maxwell
maxwell_SOURCES= main/main.c logic/logic.c ui/ui.c
INCLUDES = -Ilogic -Iui
其中bin_PROGRAMS表明生成的应用程序名,main_SOURCES中的前导main是为程序名,根据bin_PROGRAMS名变化而修改。main_SOURCES所对应为应用程序生成所依赖的源文件。此中依赖为main/main.c logic/lobic.c ui/ui.c。INCLUDES 为头文件信息。另有其他变量可以查询相关资料以获得更为详细的信息。
步骤6 automake
步骤7 ./configure
在src目录下运行./configure, 很熟悉了,一般下载下来的源码包运行下./configure就可以生成Makefile文件了。此处相同。
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... 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.out
checking for suffix of executables...
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: creating config.h
config.status: executing depfiles commands
步骤8 make
(CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/sh /home/askeyes/cp/src/missing --run autoheader)
rm -f stamp-h1
touch config.h.in
cd . && /bin/sh ./config.status config.h
config.status: creating config.h
config.status: config.h is unchanged
make all-am
make[1]: Entering directory `/home/askeyes/cp/src'
gcc -g -O2 -o maxwell main.o logic.o ui.o
make[1]: Leaving directory `/home/askeyes/cp/src'
最终生成maxwell 文件,执行之。
更多推荐
所有评论(0)