gpt4 book ai didi

c - 'pkg-config --exists' 到底是做什么的?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:28:37 24 4
gpt4 key购买 nike

我最近尝试从源代码安装一个应用程序(如果有所不同,则在 Debian Wheezy 上安装 dwb)。安装时,它会因某些依赖性问题而窒息,但对我来说,我似乎遇到了这种依赖性。 I wasn't the only person with this problem.这让我开始研究项目的 config.mk。

在 config.mk 中,我发现了几个看起来像这样的 block :

REQPKG=foo
ifeq ($(shell pkg-config --exists $(REQPKG) && echo 1),1)
LIBS=$(REQPKG)
else
$(error Cannot find $(REQPKG))
endif

这对我来说似乎非常违反直觉。我搜索和搜索。阅读手册页,咨询谷歌。尽我所能阅读有关 pkg-config 的所有内容,但一无所获。手册页特别令人沮丧,因为它只是将“--exists”列为标志而没有给出任何描述(我想它和--help一样不言自明)。

我开始认为 Debian 的 pkg-config 有一个返回相反结果的错误。但是,事实证明,当请求的包存在时,“pkg-config --exists”应该返回 0(即 False)。

这是为什么?它不会生成更清晰的代码来返回 True/False 或 1/0 以指示所需包的存在吗?你可以这样做:

if (shell pkg-config --exists foo)
/*do things*/
else
/*throw error*/
endif

而不是我看起来的样子:

ifeq (($(not(True) && True)),True)
/*do things*/
else [...]

关于 pkg-config 我错过了什么?它这样做是因为它是一个 shell 实用程序和一些关于它们的奇怪约定吗?

此外,为什么文档如此稀少?我是否缺少可以提供我正在寻找的信息的资源?

PS 我对 C 没有任何实际经验,所以如果我的示例代码看起来很奇怪......

最佳答案

pkg-config --exists 不会创建任何输出,它只是返回退出代码 0 表示成功,1 表示成功失败。

shell中的

&&在左侧返回成功时运行右侧。

因此该行正在运行 pkg-config --exists 并且如果它返回 true(返回代码为 0)然后 echo1 作为输出。然后将 1ifeq 中的 1 进行比较。

至于为什么你不能在这里做一些更简单的事情,答案是因为 make(当不在目标规则中时)不处理程序返回码。特别是 $(shell) 完全不注意正在运行的 shell 命令的返回码。

就个人而言,我可能会将该测试编写为:

ifeq ($(shell pkg-config --exists $(REQPKG); echo $?),0)

或者类似的东西

REQPKG=foo
REQPKG:=$(shell pkg-config --exists $(REQPKG) && echo '$(REQPKG)')
ifneq ($(REQPKG),)
LIBS=$(REQPKG)
else
$(error ...)
fi

关于c - 'pkg-config --exists' 到底是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25874903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com