【脚本】更新依赖库pkgconfig文件中的prefix设置

本文介绍了一个用于批量修改pkgconfig文件中prefix配置的shell脚本,旨在解决在不同机器间迁移库时路径不一致的问题。以curl库为例,当库路径改变时,需要更新.lib/pkgconfig目录下所有.pc文件的prefix字段。脚本通过递归方式遍历pkgconfig目录,查找并替换每个.pc文件中的prefix配置,确保库在新路径下的正确工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在本地编译和安装了某个库后,如果其lib目录下存在pkgconfig子目录,则子目录下会存在若干.pc文件,文件中会有prefix的配置(该配置标识当前库的安装路径),当要把该库拷贝到其他机器上时,如果库的路径不一致,需要修改lib/pkgconfig目录下.pc文件的prefix配置。
        以curl库举例说明:
在这里插入图片描述        其中libcurl.pc文件内容为:
在这里插入图片描述
        由于该库是在其他机器上编译的,编译时指定的库路径为:/opt/curl-7.76.1-ubuntu-x64,但是拷贝到本机时,存放的路径为:/home/jaron/curl-7.76.1-ubuntu-x64,因此需要对该文件进行修改,修改后为:
在这里插入图片描述        当有很多.pc文件时,或者路径比较多时,为了方便快速的根据存放路径进行设置,这里写了一个更新pkgconfig文件脚本,注意:需要把该脚本文件放在库所在目录,例如:
在这里插入图片描述
update_pkgconfig.sh

#!/bin/bash

# 更新pkgconfig文件的安装目录(支持递归)
update_pkgconfig_prefix()
{
    filePath=$1
	prefixDir=$2
    for file in `ls -a $filePath`
    do
        if [ -d ${filePath}/$file ]
        then
            # 子目录(递归)
            if [[ $file != '.' && $file != '..' ]]
            then
                update_pkgconfig_prefix ${filePath}/$file $prefixDir
            fi
        else
			filename=${filePath}/$file
            # 查找.pc后缀的文件
			if [ "${filename##*.}"x = "pc"x ]
			then
                # 查找设置prefix的所在行号
				prefix_line=`grep -n "prefix=/" $filename | cut -d ":" -f 1`
                # 新的设置内容
				prefix_str="prefix=$prefixDir"
                # 替换
				sed -i "$prefix_line c $prefix_str" $filename
			fi
        fi
    done
}

workdir=$(cd $(dirname $0); pwd)
update_pkgconfig_prefix $workdir/lib/pkgconfig $workdir
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值