Makefile 技巧

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下面。

猜你喜欢

转载自blog.csdn.net/lcxhjg/article/details/80938832