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 № 1Alternativamente, 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.