linux config/make/make install

本文详细介绍了在Linux环境下,使用configure自动生成Makefile的过程及其参数控制方法,解释了make和makeinstall的功能与作用,并概述了AUTOMAKE和AUTOCONF在发布C程序中的应用。

configure是一个shell脚本,它可以自动设定源程序以符合各种不同平台上Unix系统的特性,并且根据系统叁数及环境产生合适的Makefile文件或是C的头文件(header file),让源程序可以很方便地在这些不同的平台上被编译连接。
configure,这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,比如代码:./configure –prefix=/usr 意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。同时一些软件的配置文件你可以通过指定 –sys-config= 参数进行设定。有一些软件还可以加上 –with、–enable、–without、–disable 等等参数对编译加以控制,你可以通过允许 ./configure –help 察看详细的说明帮助。
make,这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)。如果 在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行),然后你可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码。
make insatll,这条命令来进行安装(当然有些软件需要先运行 make check 或 make test 来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)。
在Linux下安装一个应用程序时,一般先运行脚本configure,然后用make来编译源程序,在运行make install,最后运行make clean删除一些临时文件。
这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤。

./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。

make是用来编译的,它从Makefile中读取指令,然后编译。

make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。

AUTOMAKE和AUTOCONF是非常有用的用来发布C程序的东西。如果你也写程序想使用AUTOMAKE和AUTOCONF,可以参考CNGNU.ORG上的相关文章。
<think> 我们面对的是一个make menuconfig执行失败的问题,核心错误是系统找不到package/config/mconf文件。 根据之前的解决方案,我们需要确保依赖安装、工具链构建以及路径正确。 由于用户再次提交了相同的问题(只是MODEL参数不同),说明问题可能仍未解决,我们需要更详细的指导。 但注意:用户本次的问题描述与之前完全相同(除了MODEL=t变成了MODEL=xxx,这可能是笔误,但无关紧要),所以我们仍按相同思路处理。 不过我们需要考虑:用户可能已经尝试过之前的方案但未成功,因此需要补充更多可能性。 重新梳理解决方案: 1. 确认依赖:安装ncurses库(已提供命令) 2. 构建mconf:进入项目中的menuconfig目录下的package/config,执行make mconf 3. 检查路径:确保menuconfigMakefile中指定的mconf路径正确。 但是,错误信息显示make[1]进入的目录是:/home/maqianyi/rookie/code_skeleton/config/menuconfig 然后在该目录下执行package/config/mconf,说明Makefile中可能是使用相对路径`package/config/mconf`来调用。 因此,如果当前目录不是项目根目录,而是某个子目录(如config/menuconfig),那么相对路径可能就不对了?但注意,错误信息中显示的是: make -C /home/maqianyi/rookie/code_skeleton/build/../config/menuconfig MODEL=t menuconfig 这个命令是进入到了`/home/maqianyi/rookie/code_skeleton/config/menuconfig`目录,然后在该目录下执行`package/config/mconf`,因此实际路径应该是: /home/maqianyi/rookie/code_skeleton/config/menuconfig/package/config/mconf 所以,我们需要检查这个路径下是否存在mconf。 如果不存在,说明之前构建没有成功;如果存在,可能是权限问题。 另外,还有一种可能是项目结构问题:也许这个项目的menuconfig工具需要从项目根目录构建? 因此,我们补充建议: 4. 在项目根目录下执行一次完整的构建准备(如果项目有提供): make prepare # 或者类似的初始化命令 5. 检查环境变量:可能某些环境变量影响了路径。 6. 如果构建mconf失败,需要查看具体的编译错误。 所以,我们重新组织回答: ### 解决make menuconfig报错`package/config/mconf: not found`的完整方案 #### 错误原因深度分析: 错误信息`/bin/sh: 1: package/config/mconf: not found`表明系统在指定路径下未找到`mconf`可执行文件。核心原因包括: 1. **文件未生成**:可能因缺少依赖或编译失败导致`mconf`未被构建 2. **路径错误**:Makefile中指定的相对路径与当前目录不匹配 3. **权限问题**:`mconf`文件缺少可执行权限 4. **环境干扰**:PATH环境变量或项目配置异常 #### 分步解决流程: ##### 步骤1:验证依赖安装 确保已安装ncurses开发库: ```bash # Debian/Ubuntu sudo apt-get update && sudo apt-get install libncurses5-dev libncursesw5-dev # RHEL/CentOS sudo yum install ncurses-devel ``` ##### 步骤2:手动构建mconf工具 进入项目中的配置工具目录并编译: ```bash # 切换到mconf所在源码目录 cd /home/maqianyi/rookie/code_skeleton/config/menuconfig/package/config # 清理并编译 make clean make mconf # 检查生成文件 ls -l mconf ``` ##### 步骤3:设置权限并测试 ```bash chmod +x mconf # 测试执行 ./mconf ``` 正常应弹出ncurses界面,按`Esc`退出 ##### 步骤4:检查Makefile路径配置 打开`/home/maqianyi/rookie/code_skeleton/config/menuconfig/Makefile`,查找类似定义: ```makefile CONF_TOOL := $(srctree)/package/config/mconf # 或 CONF := package/config/mconf ``` 确认路径与实际位置一致(若使用相对路径,需确保执行make时工作目录正确) ##### 步骤5:从根目录构建(关键) 许多项目要求从根目录初始化构建环境: ```bash # 退回到项目根目录 cd /home/maqianyi/rookie/code_skeleton # 执行全局初始化(根据项目文档选择合适命令) make distclean # 深度清理 make prepare # 准备构建工具(常见于Linux内核等) ``` ##### 步骤6:完整重试 ```bash make MODEL=t menuconfig ``` #### 高级排查: - **查看构建日志**:在`package/config`目录编译时若出错,需解决编译错误 - **环境变量检查**:执行`env | grep PATH`确认未过滤关键路径 - **项目文档**:查阅项目README中关于配置工具的特别说明 §§相关问题§§ 1. 当编译mconf时出现"ncurses.h not found"错误该如何解决? 2. Makefile中的`$(srctree)`变量通常如何定义? 3. 如何通过修改PATH环境变量临时解决"not found"类错误? 4. 在大型项目中,`make prepare`命令一般包含哪些操作? 5. 为什么有时需要执行`make distclean`而不是`make clean`? </think> ### 关于 `make menuconfig` 失败问题的分析与解决方案 #### 错误诊断: ```bash /bin/sh: 1: package/config/mconf: not found ``` 此错误表明系统无法定位关键配置文件工具 `mconf`,通常由以下原因导致: 1. **工具链未构建**:`mconf` 程序尚未编译生成 2. **路径配置错误**:Makefile 中的相对路径与实际位置不匹配 3. **依赖缺失**:缺少 ncurses 图形库支持 4. **权限问题**:`mconf` 文件无可执行权限 5. **项目完整性**:代码仓库可能缺失配置文件子模块 #### 完整解决步骤: 1. **安装核心依赖**: ```bash # Ubuntu/Debian sudo apt-get install libncurses-dev flex bison # CentOS/RHEL sudo yum install ncurses-devel flex bison ``` 2. **构建配置工具链**: ```bash # 进入配置工具目录 cd /home/maqianyi/rookie/code_skeleton/config/menuconfig/package/config # 编译 mconf make clean make mconf # 验证生成文件 file mconf # 应显示 ELF 可执行文件 ``` 3. **修复路径问题**: ```bash # 临时添加路径(每次会话需重新执行) export PATH=$PATH:/home/maqianyi/rookie/code_skeleton/config/menuconfig/package/config # 永久解决方案:在 ~/.bashrc 添加 echo 'export PATH=$PATH:/home/maqianyi/rookie/code_skeleton/config/menuconfig/package/config' >> ~/.bashrc source ~/.bashrc ``` 4. **检查项目完整性**: ```bash # 确认子模块初始化 git submodule update --init --recursive # 检查文件是否存在 find . -name mconf -exec ls -l {} \; ``` 5. **权限修复与完整重建**: ```bash # 设置可执行权限 chmod +x /home/maqianyi/rookie/code_skeleton/config/menuconfig/package/config/mconf # 从项目根目录完整重建 cd /home/maqianyi/rookie/code_skeleton make distclean make prepare # 如果存在此目标 make MODEL=t menuconfig ``` #### 调试技巧: - 手动测试:`/home/maqianyi/rookie/code_skeleton/config/menuconfig/package/config/mconf` - 查看 Makefile:检查第 13 和 36 行的 CSDEBUG 相关定义 - 使用绝对路径:修改 Makefile 将 `package/config/mconf` 改为完整路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值