automake 使用库文件

本文介绍了一个使用automake构建项目的简单示例,包括如何组织源代码、编写Makefile.am文件、生成配置脚本以及构建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

****************************************

author: hjjdebug

date: 2015-11-09 11:33:43
automake 使用库文件
****************************************

--------------------
1. 准备素材.
--------------------
   a. mkdir hello;  //创建hello 目录
   b. cd hello; mkdir src; mkdir lib;   // 在hello 下创建src 和 lib 两个目录
   c. 在lib 目录下创建sayHello.h, sayHello.c, 在src 目录下创建main.c
      其中main.c 会调用lib目录下的sayHello 函数
   具体代码:

    ~/hello$ ls lib
    sayHello.c  sayHello.h
    ~/hello$ cat lib/sayHello.h
    #ifndef _HELLO_H
    #define _HELLO_H
    void sayhello();
    #endif

    ~/hello$ cat lib/sayHello.c
    #include <stdio.h>
    #include "sayHello.h"

    void sayhello()
    {
        printf("hello\n");
    }

    ~/hello$ cat src/main.c
    #include <stdio.h>
    #include "sayHello.h"

    int main(int argc, char *argv[])
    {
        sayhello();
    }

--------------------
2.
创建Makefile.am;
lib/Makefile.am;
src/Makefile.am,
内容如下:
--------------------

~/hello$ cat Makefile.am
AUTOMAKE_OPTIONS=foreign
SUBDIRS=lib src

~/hello$ cat lib/Makefile.am
AUTOMAKE_OPTIONS=foreign
noinst_LIBRARIES=libmytest.a
libmytest_a_SOURCES=sayHello.h sayHello.c

~/hello$ cat src/Makefile.am
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=hello
hello_SOURCES=main.c
hello_LDADD=../lib/libmytest.a
#INCLUDES = -I../lib
AM_CPPFLAGS = -I../lib

AUTOMAKE_OPTIONS 是Automake 的选项.
执行Automake 时,会检查目录下是否存在标准 GNU 软件中
应具备的文件,例如 'NEWS'、'AUTHOR'、 'ChangeLog' 等文件。
设置为foreign 时,Automake 会改用一般软件的标准来检查。
如果不加这句的话,需要在autoconf之前,先执行touch NEWS README AUTHORS ChangeLog 来生成'NEWS'、'AUTHOR'、 'ChangeLog' 等文件


noinst 表示生成的是静态库,不需要make install ,直接制定它的位置和名字就可以使用。

可执行文件名hello,是在当前目录下,如指定路径让它和源代码分开,如/root/test 目录下。写法为:

bin_PROGRAMS=/root/test/hello,后面的第三、四行也相对应地变为:  
_root_test_hello_SOURCES=hello.c  
_root_test_hello_LDADD=../lib/libmytest.a  

--------------------
3.
autoscan;
mv configure.scan configure.ac;
vim configure.ac.
修改为如下形式
--------------------

~/hello$ cat configure.ac
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])
AC_INIT([hello], [1.0], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([src/main.c])
#AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE()         # manully add

# Checks for programs.
AC_PROG_CC
AC_PROG_RANLIB                  # manully add

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_CONFIG_FILES([Makefile
                 lib/Makefile
                 src/Makefile])
AC_OUTPUT



--------------------

4. aclocal, autoconf
5.  automake -a //生成Makefile.in
6. ./configure      //生成Makefile
7. make             // 编译。
--------------------


注意问题:
注意书写语法: AUTOMAKE_OPTIONS, SUBDIRS, SOURCES, LDADD, CFLAGS
AM_INIT_AUTOMAKE, AC_PROG_RANLIB

这是个简单的示例,注意从其它开源项目中学习,automake就可以登堂入世了.
其他像动态库链接,其它关键字等,通过学习可以得到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值