Makefile.am 介绍

本文介绍了Makefile.am的基本语法和用法,包括如何指定生成的目标、依赖文件、安装目录等。此外,还详细讲解了如何利用Makefile.am来编译动态库和静态库。

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

1.概念
Makefile.am是比Makefile更高层次的规则只需要指定要生成什么目标,依赖于什么文件,和要安装到什么目录。automake会根据Makefile.am来自动生成Makefile.in 。

2.基本语法
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 定义链接时所需要的库文件

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

4.编译静态库
noinst_LTLIBRARIES = xxx.anoinst_HEADERS = a.h b.hxxx_a_SOURCES = a.c b.c xxx.c
user@debian:~/ModSecurity$ ./build.sh libtoolize: putting auxiliary files in '.'. libtoolize: copying file './ltmain.sh' libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'build'. libtoolize: copying file 'build/libtool.m4' libtoolize: copying file 'build/ltoptions.m4' libtoolize: copying file 'build/ltsugar.m4' libtoolize: copying file 'build/ltversion.m4' libtoolize: copying file 'build/lt~obsolete.m4' configure.ac:50: installing './compile' configure.ac:45: installing './missing' examples/multiprocess_c/Makefile.am: installing './depcomp' src/Makefile.am:70: warning: wildcard actions/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard actions/ctl/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard actions/data/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard actions/disruptive/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard actions/transformations/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard debug_log/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard audit_log/writer/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard collection/backend/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard operators/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard parser/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard request_body_processor/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard utils/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard variables/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard engine/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard *.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard actions/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard actions/ctl/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard actions/data/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard actions/disruptive/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard actions/transformations/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard debug_log/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard audit_log/writer/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard collection/backend/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard operators/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard parser/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard request_body_processor/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard utils/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard variables/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard engine/*.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) src/Makefile.am:70: warning: wildcard *.h: non-POSIX variable name src/Makefile.am:70: (probably a GNU make extension) user@debian:~/ModSecurity$
最新发布
06-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值