/ / Makefile для програми, що працює на різних машинах - bash, makefile, nfs, хост

Makefile для програми, що працює на різних машинах - bash, makefile, nfs, хост

У мене є програма C ++, яка працюватиме на кількохмашини, які використовують мережеву файлову систему. Для кожної бібліотеки С ++, яку використовує моя програма, я встановив версію для кожної машини під ~ / program_files / ім'я машини / ім'я бібліотеки.

"ім'я машини" отримується за допомогою команди bash"ім'я хоста". На машинах, якими я користуюся, "ім'я хоста" видає щось на зразок "io21.aaa.bbb.edu", і я беру лише "io21" як "ім'я машини" для шляху до бібліотек. У баші я це дізнався

$ HOST =hostname # тепер значення HOST - "io21.aaa.bbb.edu"

$ HOST = $ {HOST %%. *} # Витяг "io21" з "io21.aaa.bbb.edu"

$ echo $ {HOST}

io21

У Makefile своєї програми я хочу викликати ці команди bash, щоб вказати шлях до бібліотеки відповідно до поточної машини:

HOST: = $ (ім'я хоста оболонки)

HOST: = $ (оболонка $ {HOST %%. *})

LDFLAGS = -L $ {HOME} / program_files / $ {HOST} / ім'я бібліотеки / lib

CXXFLAGS = -Wall -I $ {HOME} / program_files / $ {HOST} / ім'я бібліотеки / включати

Перший рядок працює, тобто HOST - це "io21.aaa.bbb.edu", але другий рядок, який витягує "io21", не працює, а HOST все ще є "io21.aaa.bbb.edu".

Мені цікаво, як я повинен вирішити цю проблему?

Спасибі і привіт!

Відповіді:

3 для відповіді № 1

Ви також можете використовувати

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

3 для відповіді № 2

Дайте це спробуйте:

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

make за замовчуванням /bin/sh який може не підтримувати $(var%%string) побудуйте залежно від того, яку версію у вас є. Також змішування make змінні і bash змінні трохи складні.