我有一个可以在几台使用网络文件系统的机器上运行的C ++程序。对于我的程序使用的每个C ++库,我在〜/ program_files / machinename / libraryname下为每台机器安装了一个版本。
“machinename”是通过bash命令“hostname”获得的。在我使用的机器上,“hostname”输出类似“io21.aaa.bbb.edu”的内容,我只将“io21”作为“machinename”用于库的路径。在bash中,我学会了
$ HOST =
hostname
#现在HOST的值是“io21.aaa.bbb.edu”$ HOST = $ {HOST %%。*}#extract“io21”来自“io21.aaa.bbb.edu”
$ echo $ {HOST}
io21
在我的程序的Makefile中,我想调用这些bash命令来根据当前机器指定库的路径:
主机:= $(shell主机名)
HOST:= $(shell $ {HOST %%。*})
LDFLAGS = -L $ {HOME} / PROGRAM_FILES / $ {HOST} /库名称/ lib中
CXXFLAGS = -Wall -I $ {HOME} / program_files / $ {HOST} / libraryname / include
第一行是工作,即HOST是“io21.aaa.bbb.edu”,但提取“io21”的第二行不起作用,HOST仍然是“io21.aaa.bbb.edu”。
我想知道如何解决这个问题?
谢谢和问候!
答案 0 :(得分:3)
或者你可以使用
HOST := $(shell echo $(HOST) | cut -d . -f 1)
答案 1 :(得分:3)
尝试一下:
SHELL = /bin/bash
HOST := $(shell hostname)
HOST := $(shell host=$(HOST);echo $${host%%.*})
make
默认为/bin/sh
,可能不支持$(var%%string)
构造,具体取决于您拥有的版本。此外,混合make
变量和bash
变量有点挑战。