1、下载make 3.82
make工具的官方镜像地址:Index of /gnu/make ,下载指定版本的make源码包,这里我们下载make-3.82.tar.gz。
解压并进入make-3.82
2、配置
./configure
3、编译
./build.sh
出错:
/home/lyp/workspace/make/make-3.82/./glob/glob.c:1362: undefined reference to `__alloca'
/usr/bin/ld: /home/lyp/workspace/make/make-3.82/./glob/glob.c:1337: undefined reference to `__alloca'
/usr/bin/ld: /home/lyp/workspace/make/make-3.82/./glob/glob.c:1251: undefined reference to `__alloca'
/usr/bin/ld: /home/lyp/workspace/make/make-3.82/./glob/glob.c:1278: undefined reference to `__alloca'
/usr/bin/ld: glob.o: in function `glob':
/home/lyp/workspace/make/make-3.82/./glob/glob.c:576: undefined reference to `__alloca'
/usr/bin/ld: glob.o:/home/lyp/workspace/make/make-3.82/./glob/glob.c:727: more undefined references to `__alloca' follow
collect2: error: ld returned 1 exit status
处理:在编译 make-3.82 的时候出现如下错误提示_Jaime_Lee的博客-CSDN博客
修改 /glob/glob.c
// #if !defined __alloca && !defined __GNU_LIBRARY__
# ifdef __GNUC__
# undef alloca
# define alloca(n) __builtin_alloca (n)
# else /* Not GCC. */
# ifdef HAVE_ALLOCA_H
# include <alloca.h>
# else /* Not HAVE_ALLOCA_H. */
# ifndef _AIX
# ifdef WINDOWS32
# include <malloc.h>
# else
extern char *alloca ();
# endif /* WINDOWS32 */
# endif /* Not _AIX. */
# endif /* sparc or HAVE_ALLOCA_H. */
# endif /* GCC. */
# define __alloca alloca
// #endif
保存后编译通过
4、安装到指定位置
因为我们不替换掉原来的make版本所以不要直接make install
make install DESTDIR=/home/lyp/workspace/make/bin/make-3.8