1. 建立目录
1. 创建主目录:假设为HelloWorld
2. 在HelloWorld目录下创建目录src、logic、include,分别存放最终执行程序代码、编译成库的代码和头文件;当然还可以创建存放基本库的目录,这里没用到其它什么库先不创建了。
2. 创建简单的测试程序
1. 在include目录下创建文件au_test.h,内容为:
#include <stdio.h>
#define AU_NUM 10
#define AU_STR "To congratulate you on your success!"
2. 在logic目录下创建文件au_test.c,内容为:
#include "au_test.h"
void test_makefile(void)
{
printf("test makefile OK!/n");
printf("test num = %d/n", AU_NUM);
}
3. 在src目录下创建文件helloworld.c,内容为:
#include "au_test.h"
int main(int argc, char *argv[])
{
printf("helloWorld!/n");
test_makefile();
printf("%s/n", AU_STR);
return 0;
}
3. 利用Automake/Autoconf 脚本来搭建
1. 创建conifgure.in文件
在HelloWorld目录下创建conifgure.in文件。如何写这里就不介绍了,下面是一个简单的configure.in文件内容:(待确定)
AC_PREREQ(2.13)
dnl 在下面的宏中指定一个项目源文件
AC_INIT(src/helloworld.c)
dnl 设置有遇到库的使用
AC_PROG_RANLIB
dnl CC编译
AC_PROG_CC
dnl 在下面的宏中指定项目名称(samples)和项目版本号(1.0)
AM_INIT_AUTOMAKE(samples,1.0)
dnl 在下面的宏中列出要生成的 Makefile 文件
AC_OUTPUT(
Makefile
src/Makefile
logic/Makefile
)
2. 创建Makefile.am文件。
1) 在HelloWorld目录下创建Makefile.am,内容如下:
SUBDIRS = logic src
注意:logic src的顺序不要错,这就是要求要先编译库。SUBDIRS为将要编译的目录顺序。
2) 在logic目录下创建Makefile.am,内容如下:
INCLUDES= -I../include
noinst_LIBRARIES=libtest.a
libtest_a_SOURCES=au_test.c
注意:INCLUDES为文件中用到的头文件出处,libtest_a_SOURCES为需要编译的资源文件,noinst_LIBRARIES为将生成的库命名。
3) 在src目录下创建Makefile.am,内容如下:
noinst_PROGRAMS=helloworld
helloworld_SOURCES=helloworld.c
helloworld_LDADD=../logic/libtest.a
注意:noinst_PROGRAMS为最终生成的执行文件,helloworld_SOURCES为需要编译的资源文件,helloworld_LDADD为需要包含的库。
3. 创建autogen.sh文件
在HelloWorld目录下创建autogen.sh文件,内容如下:
#!/bin/sh
aclocal
automake --add-missing
autoconf
注意:该是一个shell脚本,依次调用了aclocal、automake和autoconf 命令。请注意在建立该文件之后,要运行chmod 命令使之变成可执行文件: chmod +x autogen.sh
4. 最后工作
1. 到此准备工作就已经做完了,先执行./autogen.sh,你会发现生成了好多东西,还提示少文件,手动添加文件NEWS、README、AUTHORS、ChangeLog(不知道有没有自动的);在执行次./autogen.sh就通过了。
2. 执行./configure完成环境搭建。运行下./src/helloworld看下结果吧。