Makefile用于在不同机器上运行的程序

时间:2009-08-19 23:00:08

标签: bash makefile nfs host

我有一个可以在几台使用网络文件系统的机器上运行的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”。

我想知道如何解决这个问题?

谢谢和问候!

2 个答案:

答案 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变量有点挑战。