[英]Determine library path programmatically in Makefile
我是makefile的新手,並且正在編寫一個簡單的C ++共享庫。
有沒有一種方法可以通過makefile本身動態查找庫的路徑? 我想要的是這樣的:(在我的makefile中)
INCLUDE_DIRS := `which amplex-gui`
LIBRARY_DIRS := `which amplex-gui`
amplex-gui是我在代碼中使用的庫,我需要將其lib放入目錄並包含在我的makefile中。 我想動態地找出其路徑,因為每個用戶都可能將其安裝在其計算機上的不同路徑中。 因此,我需要我的makefile來動態解析哪個命令(或者可能是$ PATH環境變量)以找到該路徑。 我該怎么做呢?
請記住,反引號是shell語法。 Make對反引號沒有任何特殊的作用。 如果使用的是GNU make,則可以使用$(shell amplex-gui)獲得與反引號等效的行為。
關於上面的評論,我不確定“嵌套命令”到底是什么意思,但是您可以肯定在make shell
函數中使用shell的$()
語法。 但是,與所有 make擴展字符串一樣,您需要將美元符號加倍以引用它們,以便將它們傳遞到外殼。 因此,例如:
INCLUDE_DIRS := $(shell echo $$(dirname $$(dirname $$(which amplex-gui))))
當然,您也可以使用make函數。 不幸的是,make dir
函數令人討厭,因為它留下了最后的斜杠,因此不能直接多次使用。 您必須在其中放置一塊patsubst,例如:
INCLUDE_DIRS := $(dir $(patsubst %/,%,$(dir $(shell which amplex-gui))))
最后,如果您具有足夠新的GNU版本,請使用abspath
函數,因此可以執行以下操作:
INCLUDE_DIRS := $(abspath $(dir $(shell which amplex-gui))../..)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.