• Makefile.am编写规则


    概念

        Makefile.am是比Makefile更高层次的规则只需要指定要生成什么目标,依赖于什么文件,和要安装到什么目录。automake会根据Makefile.am来自动生成Makefile.in 。Makefile.am里边使用的都是宏,常见的有

    .PROGRAMS ;表示可执行文件

    .LIBRARIES ;表示库文件

    .LTLIBRARIES ;表示库文件,LT表示libtool

    .HEADERS ;头文件

    .DATA ;数据文件

    1、编译可执行文件

    #Makefile.am文件
    bin_PROGRAMS = xxx #bin_PROGRAMS 表示指定要生成的可执行应用程序文件,这表示可执行文件在安装时需要被安装到系统
    #中;如果只是想编译,不想被安装到系统中,可以用noinst_PROGRAMS来代替
    xxx_SOURCES
    = a.c b.c c.c main.c d.c xxx.c
    #xxx_SOURCES表示生成可执行应用程序所用的源文件,这里注意,xxx_是由前面的bin_PROGRAMS
    #指定的,如果前面是生成example,那么这里就是example_SOURCES,其它的类似标识也是一样
    xxx_CPPFLAGS
    = -DCONFIG_DIR="$(sysconfdir)" -DLIBRARY_DIR="$(pkglibdir)"
    #xxx_CPPFLAGS 这和Makefile文件中一样,表示C语言预处理参数,这里指定了DCONFIG_DIR,以后
    #在程序中,就可以直接使用CONFIG_DIR。不要把这个和另一个CFLAGS混淆,后者表示编译器参数

    xxx_LDFLAGS = -export-dynamic -lmemcached
    #xxx_LDFLAGS 连接的时候所需库文件的标识,这个也就是对应一些如-l,-shared等选项
    noinst_HEADERS
    = xxx.h #这个表示该头文件只是参加可执行文件的编译,而不用安装到安装目录下。如果需要安装到系统中,
    #可以用include_HEADERS来代替
    INCLUDES
    = -I/usr/local/libmemcached/include/ #INCLUDES 链接时所需要的头文件
    xxx_LDADD
    = $(top_builddir)/sx/libsession.a $(top_builddir)/util/libutil.a
    #xxx_LDADD 链接时所需要的库文件,这里表示需要两个库文件的支持

     2、编译动态库文件

          要生成xxx.so文件

    #Makefile.am文件
    xxxlibdir=$(libdir)//新建一个目录,该目录就是lib目录,运行后xxx.so将安装在该目录下 xxxlib_PROGRAMS=xxx.so xxx_so_SOURCES=xxx.c xxx_so_LDFLAGS=-shared -fpic //GCC编译动态库的选项

    3、编译静态库文件

         要生成xxx.a

    #Makefile.am文件
    noinst_LTLIBRARIES = xxx.a noinst_HEADERS = a.h b.h xxx_a_SOURCES = a.c b.c xxx.c
    海阔凭鱼跃,天高任鸟飞。
  • 相关阅读:
    74.Interesting Sequence(有趣的数列)(拓扑排序)
    CODEVS 1746 贪吃的九头龙
    NYOJ 110 剑客决斗
    CODEVS 2451 互不侵犯
    洛谷 P1896 互不侵犯King
    洛谷 P1066 2^k进制数
    洛谷 P1656 炸铁路
    洛谷 P1830 轰炸Ⅲ
    CODEVS 1051 接龙游戏
    POJ 3461 Oulipo
  • 原文地址:https://www.cnblogs.com/chenshikun/p/6096647.html
Copyright © 2020-2023  润新知