0

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

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

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

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

4

1 回答 1

1

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

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

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

当然你也可以使用 make 函数;不幸的是,makedir函数很烦人,因为它会留下最后的斜线,因此不能直接多次使用。您必须在其中放置一个 patsubst,例如:

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

最后,如果您有足够新的 GNU 版本,则可以使用该abspath功能,因此您可以执行以下操作:

INCLUDE_DIRS := $(abspath $(dir $(shell which amplex-gui))../..)
于 2013-08-03T13:45:03.517 回答