我是makefile的新手,我正在编写一个简单的C ++共享库。
有没有办法通过makefile本身动态查找库的路径?我想要的是这样的:(在我的makefile中)
INCLUDE_DIRS := `which amplex-gui`
LIBRARY_DIRS := `which amplex-gui`
amplex-gui是我在我的代码中使用的库,我需要将其lib和include目录放在我的makefile中。我想动态地找出它的路径,因为每个用户可能将它安装在他们机器上的不同路径中。因此,我需要我的makefile动态解析哪个命令(或者可能是$ PATH环境变量)来查找该路径。我怎么能这样做呢?
答案 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))../..)