Makfile简介
Makefile基本上就是【目标】(target)【关联】(dependencies)和【动作】三者所组成的一系列规则。而make就会根据Makefile的规则来决定如何编译(comile)和连接(link)程序。
自己编写(适用于小型项目):
其中Makefile为:
运用autoconf,automake自动生成makefile(适用于大型项目):
如图为automake,autoconf生成makefile的过程(简化)。
为一个项目源文件生成makefile并make的步骤如下:
操作在包含源文件的项目目录下进行。
(1). 运行autoscan,生成文件configure.scan。
(2). 修改configure.scan,改名为configure.ac。
(3).运行aclocal,生成aclocal.m4。
(4).运行autoheader,生成文件configure.h.in 。configure.in里有宏AC_CONFIG_HEADER()时用。
(5). 运行autoconf,生成configure。
(6).为源文件编写Makefie.am,每一个包含源文件的目录和子目录都有一个Makefile.am。
(7).运行libtoolize --automake --copy --debug --force,生成一些支持文件,ltmain.sh。需要用libtool生成共享库用。
(8) automake -a 或者 automake --add-missing 选项可以补齐文件config.guess,config.sub,install-sh,missing,depcomp
(8).运行automake,生成makefile.in,每个包含Makefile.am的子目录都生成Makefile.in。
(9).运行./configure,生成config.status,config.h,makefile。
(10).运行make,生成中间文件对象文件,库文件,最后生成可执行文件。
(11).运行make install,相应的可执行文件,库文件,头文件拷贝到系统相应位置。
(12)执行Makefile.am中定义的文件名helloworld.
$ ./helloworld
2.下面是带图文详细步骤:
原文链接:https://blog.csdn.net/liguangxianbin/article/details/80177491
Makefile.am介绍
Makefile.am是一种比 Makefile 更高层次的规则。只需要指定要生成什么目标,它由什么源文件生成,要安装到什么目录 等构成
下表列出了可执行文件、静态库、头文件和数据文件,四种书写 Makefile.am 文件的一般格式。
对于可执行文件和静态库类型,如果只想编译,不想安装到系统中,可以用 noinst_PROGRAMS 代替 bin_PROGRAMS, noinst_LIBRARIES 代替 lib_LIBRARIES。
Makefile.am 文件还提供一些全局变量供所有的目标使用:
在Makefile.am 中尽量使用相对路径,系统预定义了两个基本路径:
原文链接:https://blog.csdn.net/u011641885/article/details/47037421
例子:
top_srcdir = ${IPLATURE} top_srcdir_pcs = ${IXCOMPCS} PROGRAM := ${AUTOTEST}/bin/DB2SendTest SRCDIRS := . include $(top_srcdir)/source/iplature_exegeneral LINKWITH += -L${IXCOMPCS}/Library -liXcomTCP2 -lXmlRpc -lTinyXml -lCppSQLite3 -lrt -lPowerTranser LINKWITH += -L${IXCOMPCS}/Library -lboost_thread -lCommonLibrary -lutility LINKWITH += -L${AUTOTEST}/Library -lAssertBase CXXFLAGS += -D _LINUX -I${IXCOMPCS}/Include CXXFLAGS += -std=c++11 ifeq ($(RELEASE),0) CXXFLAGS += -g else CXXFLAGS += -O2 -DNDEBUG endif CXXFLAGS += -D _LINUX -I${AUTOTEST}/include CXXFLAGS += -I .