如何仅在本地文件夹编译旧版m4宏处理器,避免系统全局安装?
编译GNU m4 branch-1.4本地版本的解决方案
直接用gcc手动编译的可行性
直接写gcc -o m4 foo.c bar.c这种命令行不通。理由很简单:
- GNU m4是多文件项目,branch-1.4里的.c文件有几十个,手动列全所有源文件既麻烦又容易遗漏
- 编译时需要特定的预处理宏、编译选项,还依赖系统特定头文件,这些参数靠手动凑根本不现实
正确的本地构建流程(避免覆盖系统m4)
1. 解决autotools版本不兼容的问题
2000年的branch-1.4用的是旧版autotools脚本,和现在系统里的新版autotools(比如autoconf 2.69+)不兼容,所以会报错。你需要安装对应版本的autotools:
- Debian/Ubuntu系可以装
autoconf2.13:sudo apt install autoconf2.13 - 生成适配的配置脚本:
autoconf2.13 configure.ac > configure
2. 配置本地安装路径
运行configure时指定--prefix参数,把所有文件安装到当前目录的子文件夹里,完全不碰系统目录:
./configure --prefix=$(pwd)/local_install
如果需要指定编译器,加CC=gcc参数:
./configure CC=gcc --prefix=$(pwd)/local_install
3. 编译&安装
make make install
完成后,本地版m4会在./local_install/bin/m4路径下。
4. 调试
直接调用本地版本启动GDB:
gdb ./local_install/bin/m4
内容的提问来源于stack exchange,提问作者nostromo
相关产品推荐
相关产品推荐

