2009-08-19 5 views
2

ネットワークファイルシステムを使用するいくつかのマシンで動作するC++プログラムがあります。私のプログラムが使用する各C++ライブラリについては、〜/ program_files/machinename/librarynameの下に、各マシンのバージョンをインストールしました。異なるマシン上で動作するプログラムのMakefile

"machinename"は、bashコマンド "hostname"によって取得されます。私が使っているマシンでは、 "hostname"は "io21.aaa.bbb.edu"のようなものを出力し、ライブラリへのパスの "machinename"として "io21"だけを取ります。 bashで、私は= hostname

の$ HOSTが今HOSTの値が "io21.aaa.bbb.edu"

$ HOST = $ {HOSTの%%。*}#エキス」であることを学びましたio21.aaa.bbb.edu "

$から" IO21" は、私のプログラムのMakefileで

IO21

$ {HOST}をエコー、私はこれらのbashを呼び出したいを指定するためのコマンドパス

HOST:= $(シェルのホスト名)

HOST:現在のマシンに応じてライブラリに= $(シェル$ {HOST %% *})

LDFLAGS = -L $ {HOME}/PROGRAM_FILES/$ {HOST} /ライブラリ名/ LIB

CXXFLAGS = -Wall -I $ {HOME}/PROGRAM_FILES/$ {HOST} /ライブラリ名/最初の行である

を含みますつまりHOSTは "io21"です。 aaa.bbb.edu "と表示されますが、" io21 "を抽出する2行目は機能せず、HOSTはまだ" io21.aaa.bbb.edu "です。

この問題をどのように解決すればよいでしょうか?

ありがとうございました!あなたが持っているバージョンに応じ$(var%%string)構文をサポートしていない可能性が/bin/sh

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

makeデフォルト:

答えて

3

別の方法としては、これを試してみてください

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

を使用することができます。また、変数makeと変数bashを混ぜることはやや難しいことです。

関連する問題