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
相关产品推荐
相关产品推荐

