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

时间:2013-08-02 23:55:50

标签: c++ makefile

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

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

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

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

1 个答案:

答案 0 :(得分:1)

请记住,反引用是shell语法。 Make不会对反引号做任何特殊处理。如果你正在使用GNU make,你可以使用$(shell amplex-gui)来获得与反引号相同的行为。

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

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

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

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

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

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