/ / Makefile para el programa que se ejecuta en diferentes máquinas - bash, makefile, nfs, host

Makefile para el programa que se ejecuta en diferentes máquinas: bash, makefile, nfs, host

Tengo un programa de C ++ que se ejecutará en variosMáquinas que utilizan un sistema de archivos de red. Para cada una de las bibliotecas de C ++ que utiliza mi programa, instalé una versión para cada máquina, en ~ / program_files / machinename / libraryname.

"nombre de máquina" se obtiene a través del comando bash"nombre de host". En las máquinas que estoy usando, "nombre de host" da como resultado "io21.aaa.bbb.edu" y solo tomo "io21" como "nombre de máquina" para la ruta a las bibliotecas. En bash, aprendí que

$ HOST =hostname # ahora el valor de HOST es "io21.aaa.bbb.edu"

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

$ echo $ {HOST}

io21

En el Makefile de mi programa, quiero llamar a estos comandos de bash para especificar la ruta a la biblioteca de acuerdo con la máquina actual:

HOST: = $ (nombre de host de shell)

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

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

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

La primera línea funciona, es decir, HOST es "io21.aaa.bbb.edu", pero la segunda línea que extrae "io21" no funciona y HOST sigue siendo "io21.aaa.bbb.edu".

Me pregunto cómo debería resolver este problema.

¡Gracias y saludos!

Respuestas

3 para la respuesta № 1

Alternativamente puedes usar

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

3 para la respuesta № 2

Prueba esto:

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

make por defecto a /bin/sh que no puede apoyar el $(var%%string) Construye dependiendo de que versión tengas. Además, mezclando make variables y bash Las variables son un poco desafiantes.