我的 总结:今天我发现Makefile真的是博大精深,今天学到了安装,$(prefix),把应用安装到指定的目录中。
工程下Makefile是根据规则来编译整个工程的,这个和编译简单的hello world 是一个道理。
Makefile的框架是由规则构成的,make命令执行时,先在Makefile文件中查找各种规则,对各种规则进行解析后,运行规则。规则的基本格式为
TARGET… :DEPENDEDS…
COMAND
TARGET:规则所定义的目标。通常规则是最后生成的可执行文件的文件名或者为了生成可执行文件而依赖的目标文件的文件名,也可以是一个动作,称之为。伪目标。
先来说下Makefile.am中常见的文件编译类型,详细的编译类型和全局变量鹏博客会在下面在图表中列出:PROGRAMS 表示可执行文件SOURCES 表示源文件HEADERS 头文件。LIBRARIES 表示库文件LTLIBRARIES 这也是表示库文件,前面的LT表示libtool。DATA 数据文件,不能执行。SCRIPTS 脚本文件,这个可以被用于执行。如:example_SCRIPTS,如果用这样的话,需要我们自己定义安装目录下的example目录,很容易的,往下看。
一、基本写法下面就直接引入一个例子进行详细讲解,如下:AUTOMAKE_OPTIONS = foreignbin_PROGRAMS = clientclient_SOURCES = key.c connect.c client.c main.c session.c hash.cclient_CPPFLAGS = -DCONFIG_DIR=\“KaTeX parse error: Expected 'EOF', got '\”' at position 13: (sysconfdir)\̲”̲ -DLIBRARY_DIR=…(pkglibdir)\”client_LDFLAGS = -export-dynamic -lmemcachednoinst_HEADERS = client.hINCLUDES = -I/usr/local/libmemcached/include/client_LDADD = $(top_builddir)/sx/libsession.la $(top_builddir)/util/libutil.la上面就是一个Makefile.am示例文件,这个文件是用于生成client可执行应用程序,引用了两个静态库和MC等动态库的连接。先来看个图表一(列出了可执行文件、静态库、头文件和数据文件,四种书写Makefile.am文件个一般格式。):
prefix参数的作用,其主要用在编译安装源代码应用中的./configure环节。
1、源码安装一般包括几个步骤:配置(configure),编译(make),安装(make install)。
2、其中configure是一个可执行脚本,在源码目录中执行可以完成自动的配置工作,即./configure。
3、在实际的安装过程中,我们可以增加–prefix参数,这样可以将要安装的应用安装到指定的目录中,如,我们要安装git应用,在配置环节可以使用如下命令:
–prefix
./configure --prefix=/usr/local/git
之后再执行make & make install命令就可以将git安装到了/usr/local/git目录中,这样做的好处就是方便以后的维护。
来源:简书
全局变量,可能有人注意到文件中的 ( t o p b u i l d d i r ) 等 全 局 变 量 , 其 实 这 个 是 M a k e f i l e . a m 系 统 定 义 的 一 个 基 本 路 径 变 量 , 表 示 生 成 目 标 文 件 的 最 上 层 目 录 , 如 果 这 个 M a k e f i l e . a m 文 件 变 成 其 它 的 M a k e f i l e . a m 文 件 , 那 么 这 个 就 表 示 其 它 的 目 录 , 而 不 是 这 个 当 前 目 录