簡體   English   中英

在Makefile中以編程方式確定庫路徑

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM