ネットワークファイルシステムを使用するいくつかのマシンで動作する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
デフォルト: