目录结构图示
目录特点:
- 头文件在一个目录;
- 源文件在一个目录
- 顶层目录一个入口主文件;
手动修改的几个文件
假设当前工作目录在,所以下面的介绍都加上了该工作目录方便说明:
002_deep/
002_deep/configure.ac
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT([main], [1.2], [www.softool.cn])
#只填写入口主文件名即可:
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
AC_PROG_RANLIB
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
#各个目录下面都需要一个 Makefile
AC_OUTPUT(Makefile
inc/Makefile
hello/Makefile
)
002_deep/Makefile.am
AUTOMAKE_OPTIONS = foreign
## 我们要使用递归目录变量 SUBDIRS
## 注意:头文件目录也要添加进来
SUBDIRS = hello inc
## 指定要生成的可执行文件的名:
bin_PROGRAMS = main
## 指定上面要生成可执行文件名依赖的主入口源文件:
main_SOURCES = main.c
## 需要链接各子目录生成的库:
main_LDADD = hello/libhello.a
## 指定 main.c 链接时需要寻找的头文件路径 inc/
## !个人感觉,我这里好像没有起作用,带考究!
INCLUDES = -I./inc
002_deep/inc/Makefile.am
AUTOMAKE_OPTIONS = foreign
## 由于此处的头文件,不需要安装到指定的目录中,所以我这里使用的前缀为 noinst
noinst_HEADERS = hello.h
002_deep/hello/Makefile.am
AUTOMAKE_OPTIONS = foreign
## 指定要生成的静态库
## 由于不需要安装到指定的目录中,所以这里使用的前缀为 noinst
noinst_LIBRARIES = libhello.a
## 指定上面的静态库依赖的源文件:
libhello_a_SOURCES = hello.c
## 指定编译选项搜索的头文件路径, 相当于 gcc -I../inc
libhello_a_CFLAGS = -I../inc
整个命令的执行过程
autoscan
mv configure.scan configure.ac
#手动编辑 configure.ac
aclocal
autoconf
autoheader
#手动编辑各目录的 Makefile.am
automake -a
./configure
make
效果
下图为执行过程演示图:
下图为目录结构图: