2009-08-19 37 views
2

我有一個C++程序可以在多臺使用網絡文件系統的機器上運行。對於我的程序使用的每個C++庫,我在〜/ program_files/machinename/libraryname下爲每臺機器安裝了一個版本。用於在不同機器上運行的程序的Makefile

「machinename」是通過bash命令「hostname」獲得的。在我使用的機器上,「主機名」輸出類似「io21.aaa.bbb.edu」的內​​容,而我只將「io21」作爲「機器名」作爲庫的路徑。在bash中,我瞭解到,

$ HOST = hostname#現在HOST的值是 「io21.aaa.bbb.edu」

$ HOST = $ {HOST %%。*}#提取物「 io21" ,從 「io21.aaa.bbb.edu」

$回聲$ {HOST}

io21

在我的程序的Makefile中,我想打電話給這些慶典命令來指定路徑根據當前的機庫:

HOST:= $(殼主機名)

HOST:= $(殼$ {。HOST %% *})

LDFLAGS = -L $ {HOME}/PROGRAM_FILES/$ {HOST} /庫名稱/ lib中

CXXFLAGS = -Wall -I $ {HOME}/PROGRAM_FILES/$ {HOST} /庫名稱/包括

的第一行是工作即HOST是「io21。 aaa.bbb.edu「,但提取」io21「的第二行不起作用,HOST仍然是」io21.aaa.bbb.edu「。

我想知道我應該如何解決這個問題?

感謝和問候!

回答

3

或者您可以使用

HOST := $(shell echo $(HOST) | cut -d . -f 1) 
3

試試這個:

SHELL = /bin/bash 
HOST := $(shell hostname) 
HOST := $(shell host=$(HOST);echo $${host%%.*}) 

make默認爲/bin/sh這可能不支持$(var%%string)結構取決於你擁有的版本。另外,混合make變量和bash變量有點具有挑戰性。

相關問題