【问题标题】:Makefile for program running on different machines用于在不同机器上运行的程序的 Makefile
【发布时间】:2009-08-19 23:00:07
【问题描述】:

我有一个 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”

$ 回声 ${HOST}

io21

在我程序的Makefile中,我想根据当前机器调用这些bash命令来指定库的路径:

HOST := $(shell 主机名)

HOST := $(shell ${HOST%%.*})

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

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

第一行有效,即 HOST 是“io21.aaa.bbb.edu”,但提取“io21”的第二行不起作用,HOST 仍然是“io21.aaa.bbb.edu”。

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

感谢和问候!

【问题讨论】:

    标签: bash makefile nfs host


    【解决方案1】:

    你也可以使用

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

    【讨论】:

      【解决方案2】:

      试试这个:

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

      make 默认为 /bin/sh,它可能不支持 $(var%%string) 构造,具体取决于您拥有的版本。此外,混合make 变量和bash 变量有点挑战。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-27
        • 1970-01-01
        • 2020-10-17
        • 1970-01-01
        • 2022-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多