makefile的参数 一般我们执行make –fclient.mk build;除了build
Target name | Description | build | Default target. Compile Firefox, Thunderbird, etc | check | Standalone shell unit test invoked directly by make | configure | Launch the configure program to define headers and and attributes for the target build machine. | export | Generate and install exported headers: EXPORTS | makefiles | Target used to only regenerate makefiles | package | Generate a package tarball |
Clean Targets | clean | Remove object files, binaries and generated content | clobber | alias for clean | distclean | Clean + configure cleanup |
主要流程configure最初会生成config.status,并处理autoconf.mk,在这个阶段主要的结构都在config.status(python脚本),它的结构主要有两部分,一部分是作为configure的输出,一部分是build backend(一个类似gnu make的工具)的命令工具。 2.make从根目录开始处理makefile,递归到每一个DIRS定义的子目录。调用编译器编译
标准头:由configure 替换其中的变量,configure的大部分规则在configure DEPTH = @DEPTH@ topsrcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@
#大部分参数都是定义在config,mk与rules.mk之间
include$(topsrcdir)/config/config.mk
# ... Main body of Makefile goes here ...
include$(topsrcdir)/config/rules.mk
# ... Additional rules go here ...
l MODULE=xxx模块名,会在 include下创建模块文件夹,如dist/include/$(MODULE)。 l MODULE_NAME=xxx:如果makefile是用于产生一个component,需要指定组件注册的名字,改名字需要和NS_IMPL_NSGETMODULE函数指定的名字一致。(目前该函数已经不再使用,一般设为component模块定义的文件名字,如例子代码中的nsSampleModule) l EXPORTS=xxx.h:需要导出的头文件,拷贝到dist/include/$(MODULE)下.
l XPIDL_MODULE=xxx:指定IDL文件产生的xpt文件的名字,每一个有IDL文件的目录必须有一个唯一的typelib和文件,存放于dist/bin/component l XPIDLSRCS=xxx指定IDL文件,用于产生需要的头文件与xpt文件件,拷贝到dist/idl目录,产生的头文件拷贝/dist/include/$(MODULE) l LIBRARY_NAME=xxx:指定产生的lib的名字,存放于dist/bin/component。 l SHORTLIB_NAME=xxxxxxxx: 指定一个8字符的名字,如xpcomsmp.dll l IS_COMPONENT:指定是否产生一个组件(component)。有三种库文件(组件,非组件动态库,静态库)。 n 组件:component是一种独立的动态库(也可以是静态编译的),不会被其他库引用,存放于dist/bin/component目录. n 非组件动态库:放在dist/bin目录下,提供其他组件调用 n 静态库 l FORCE_SHARED_LIB=1:把组件编译成dll形式,它与EXPORT_LIBRARY是对立的。 l EXPORT_LIBRARY=1与BUILD_STATIC_LIBS一起使用,把component编译成静态形式 在--enable-static的模式下,组件会编译成静态库并连接到可执行程序,执行程序需要通过EXPORT_LIBRARY来表示可给连接 l BUILD_STATIC_LIBS需要在—enable-static的编译条件下才会在autoconf.mk中设置(才会有效)。 l FORCE_STATIC_LIB=1指示模块编译成静态库。 l SHARED_LIBRARY_LIBS: 指定需要连接的库 l EXTRA_COMPONENTS:安装组件组要的文件 *.js, *.manifest. l EXTRA_DSO_LDOPTS:当编译一个动态库时起效,用于连接需要的lib. l EXTRA_DSO_LIBS一般是嵌入到EXTRA_DSO_LDOPTS使用,标识一些lib,并自动产生对应的连接符号–lfoo(linux) foo.lib(windows)
|