gpt4 book ai didi

c++ - 在 Makefile 中以编程方式确定库路径

转载 作者:行者123 更新时间:2023-11-28 07:29:17 29 4
gpt4 key购买 nike

我是 makefile 的新手,我正在编写一个简单的 C++ 共享库。

有没有办法通过 makefile 本身动态查找库的路径?我想要的是这样的:(在我的 makefile 中)

INCLUDE_DIRS := `which amplex-gui`
LIBRARY_DIRS := `which amplex-gui`

amplex-gui 是我在代码中使用的一个库,我需要将其 lib 和 include 目录放入我的 makefile 中。我想动态地找出它的路径,因为每个用户都可能将它安装在他们机器上的不同路径中。因此,我需要我的 makefile 来动态解析 which 命令(或者可能是 $PATH 环境变量)以找到该路径。我该怎么做呢?

最佳答案

请记住,反引号是 shell 语法。 Make 对反引号没有做任何特别的事情。如果您使用的是 GNU make,则可以使用 $(shell which amplex-gui) 获得与反引号等效的行为。

关于你上面的评论,我不确定你所说的“嵌套命令”到底是什么意思,但你绝对可以使用 shell 的 $() make 中的语法 shell功能。但是,对于进行扩展的所有 字符串,您需要将美元符号加倍以引用它们,以便将它们传递给 shell。例如:

INCLUDE_DIRS := $(shell echo $$(dirname $$(dirname $$(which amplex-gui))))

当然你也可以使用make函数;不幸的是制造dir函数很烦人,因为它留下了最后的斜杠,所以不能直接多次使用。你必须在那里放一个 patsubst,比如:

INCLUDE_DIRS := $(dir $(patsubst %/,%,$(dir $(shell which amplex-gui))))

最后,如果你有一个足够新的 GNU 版本,那就是 abspath函数,所以你可以这样做:

INCLUDE_DIRS := $(abspath $(dir $(shell which amplex-gui))../..)

关于c++ - 在 Makefile 中以编程方式确定库路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18027821/

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