You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Makefile适配多发行版:根据已安装deb包动态选择构建依赖名

适配多发行版依赖的Makefile实现方案

原有代码存在两个核心问题:一是ifeq中直接写shell命令不会被执行,需要使用$(shell)函数调用系统命令;二是Make没有原生elif语法,可以通过嵌套ifeq结构实现分支判断。

你可以参考以下实现:

all: build

# 提前查询新旧版本log4cxx开发包的安装状态
HAS_OLD_LOG4CXX := $(shell dpkg -l | grep -E '\sliblog4cxx10-dev(:.*)?$$' >/dev/null 2>&1 && echo yes)
HAS_NEW_LOG4CXX := $(shell dpkg -l | grep -E '\sliblog4cxx-dev(:.*)?$$' >/dev/null 2>&1 && echo yes)

ifeq ($(HAS_OLD_LOG4CXX), yes)
    # 已安装Jessie源对应的旧版包,添加旧版依赖
    build_dependences += liblog4cxx10-dev(>=0.10.0)
else
    ifeq ($(HAS_NEW_LOG4CXX), yes)
        # 已安装新版源对应的包,添加新版依赖
        build_dependences += liblog4cxx-dev(>=0.10.0)
    endif
    # 两个包都未安装则不添加对应依赖,后续依赖检查会自动报错,符合预期行为
endif

# 保留原有其他依赖
build_dependences += qos-libqos-dev(>=1.3.0)
build_dependences += libjsoncpp-dev(>=0.5.0)

# 原有build相关逻辑保持不变
# yadayadayada

该实现逻辑完全符合你的需求:优先匹配旧版包,旧版不存在时匹配新版包,两个包都未安装时会自然触发依赖缺失报错,不需要额外处理。

内容的提问来源于stack exchange,提问作者genesi5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:36:02