/ / Makefile para programa em execução em máquinas diferentes - bash, makefile, nfs, host

Makefile para o programa em execução em máquinas diferentes - bash, makefile, nfs, host

Eu tenho um programa C ++ que será executado em váriosmáquinas que usam um sistema de arquivos de rede. Para cada uma das bibliotecas C ++ que meu programa usa, instalei uma versão para cada máquina, em ~ / program_files / machinename / libraryname.

"nome da máquina" é obtido através do comando bash"nome de anfitrião". Nas máquinas que estou usando, "hostname" gera algo como "io21.aaa.bbb.edu" e utilizo apenas "io21" como "nome da máquina" para o caminho para as bibliotecas. Na festança, eu aprendi que

$ HOST =hostname # agora o valor de HOST é "io21.aaa.bbb.edu"

$ HOST = $ {HOST %%. *} # Extrai "io21" de "io21.aaa.bbb.edu"

$ echo $ {HOST}

io21

No Makefile do meu programa, desejo chamar esses comandos bash para especificar o caminho da biblioteca de acordo com a máquina atual:

HOST: = $ (nome do host do shell)

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

LDFLAGS = -L $ {HOME} / arquivos de programas / $ {HOST} / nome da biblioteca / lib

CXXFLAGS = -Wall -I $ {HOME} / arquivos de programas / $ {HOST} / nome da biblioteca / include

A primeira linha está funcionando, ou seja, HOST é "io21.aaa.bbb.edu", mas a segunda linha que extrai "io21" não funciona e HOST ainda é "io21.aaa.bbb.edu".

Eu estou querendo saber como eu deveria resolver este problema?

Obrigado e cumprimentos!

Respostas:

3 para resposta № 1

Alternativamente, você pode usar

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

3 para resposta № 2

Experimente:

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

make o padrão é /bin/sh que pode não suportar o $(var%%string) construir dependendo da versão que você possui. Além disso, misturar make variáveis ​​e bash variáveis ​​é um pouco desafiador.