1. 隐藏命令: 通常,make会把其要执行的命令行在命令执行前输出到屏幕上。当我们用“@”字符在命令行前,那么,这个命令将不被make显示出来
2. 命令出错: 每当命令运行完后,make会检测每个命令的返回码,如果命令返回成功,那么make会执行下一条命令,当规则中所有的命令成功返回后,这个规则就算是成功完成了。如果一个规则中的某个命令出错了(命令退出码非零),那么make就会终止执行当前规则,这将有可能终止所有规则的执行。忽略命令的出错,我们可以在Makefile的命令行前加一个减号“-”(在Tab键之后),标记为不管命令出不出错都认为是成功的。
3. 嵌套执行make:
总控Makefile的变量可以传递到下级的Makefile中(如果你显示的声明),但是不会覆盖下层的Makefile中所定义的变量,除非指定了“-e”参数。
如果你要传递变量到下级Makefile中,那么你可以使用这样的声明:
export <variable ...>;
如果你不想让某些变量传递到下级Makefile中,那么你可以这样声明:
unexport <variable ...>;
4. 交叉编译
a) Example: 交叉编译libcgroup-0.38
b) #./configure--cache-file=./ldat_config_cache --host=powerpc-target-linu x-gnu --build=i686-crosscompile-linux-gnu--prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man--sysconfdir=/etc --includedir=/usr/include --libdir=/usr /lib --libexecdir=/usr/lib--localstatedir=/var --disable-tools --disable-pam --disable-daemon
c) ./configure --prefix=*
d) 确定了程序会被包装到哪里,以及,程序将在什么位置搜寻运行需要用到的相关的文件。如果你在一台机器上编译,然后仍然在这台机器上运行,那使用configure --prefix就是你想要的了。
e) make install DESTDIR=*
f) 把程序安装到一个临时用的目录,这个目录不是程序以后将要运行的目录。例如,这个功能被deb包的打包人员使用。打包人员使用此功能时,并不真正把程序安装到--prefix指定的目录下。因为他可能已经安装了不同的版本,他不想搞乱他的环境,或者他没有boot权限,没有办法把程序安装到/bin,/sbin之类目录。 --prefix=/usr,让程序运行时认为被安装在/usr,然后make install DESTDIR=debian/tmp则实际把程序安装到debian/tmp
g) 区别
./configure --prefix=usr/local &&make && sudo make install prefix=/usr/local/stow/foo 会把程序安装在/usr/local/stow/bin目录下。 而: make install DESTDIR=/usr/local/stow/foo,则把程序安装在/usr/local/stow/foo/usr/local/bin下面。