2

ネットワーク ファイル システムを使用する複数のマシンで実行する C++ プログラムがあります。私のプログラムが使用する C++ ライブラリごとに、各マシン用のバージョンを ~/program_files/machinename/libraryname の下にインストールしました。

「マシン名」は bash コマンド「ホスト名」で取得します。私が使用しているマシンでは、「ホスト名」は「io21.aaa.bbb.edu」のようなものを出力し、ライブラリへのパスの「マシン名」として「io21」のみを使用します。bashで、私はそれを学びました

$ HOST= hostname# HOST の値は "io21.aaa.bbb.edu" になりました

$ HOST=${HOST%%.*} # 「io21.aaa.bbb.edu」から「io21」を抽出

$ echo ${HOST}

io21

プログラムの Makefile で、これらの bash コマンドを呼び出して、現在のマシンに応じてライブラリへのパスを指定したいと考えています。

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

ホスト := $(シェル ${HOST%%.*})

LDFLAGS=-L${HOME}/program_files/${HOST}/libraryname/lib

CXXFLAGS=-Wall -I${HOME}/program_files/${HOST}/libraryname/include

最初の行は機能しています。つまり、HOST は "io21.aaa.bbb.edu" ですが、"io21" を抽出する 2 行目は機能せず、HOST は "io21.aaa.bbb.edu" のままです。

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

よろしくお願いします!

4

2 に答える 2

3

あるいは、使用することができます

HOST := $(shell echo $(HOST) | cut -d . -f 1)
于 2009-08-19T23:45:47.553 に答える
3

これを試してください:

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

make使用しているバージョンによっては/bin/sh、構成をサポートしない可能性があるデフォルトです。また、変数と変数$(var%%string)を混在させるのは少し難しいです。makebash

于 2009-08-21T04:06:20.217 に答える