У мене є програма 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
змінні трохи складні.