Создайте переменную в make-файле, прочитав содержимое другого файла - PullRequest
56 голосов
/ 20 июля 2011

Как я могу на лету создать переменную из make-файла, значением которой будет все содержимое другого файла данных.

Ответы [ 7 ]

61 голосов
/ 21 июля 2011

Предполагая, что GNU make:

file := whatever.txt
variable := $(shell cat ${file})
34 голосов
/ 20 июля 2011

Я предполагаю, что вы хотите установить переменную в вашем Makefile для содержимого другого файла:

FILE=test.txt
VARIABLE=`cat $(FILE)`

target:
    echo $(VARIABLE)
16 голосов
/ 17 ноября 2017

GNU make version 4.2 поддерживает операцию чтения файлов, поэтому в отношении Максим Егорушкин отличный ответ: теперь есть дополнительный способ решения этой проблемы:

FILE     := test.txt
variable :=$(file < $(FILE))
12 голосов
/ 02 октября 2014

cat не существует в Windows.Решение, которое работает для Linux и Windows:

cat := $(if $(filter $(OS),Windows_NT),type,cat)
variable := $(shell $(cat) filename)

Объяснение: Похоже, что в Windows всегда есть переменная окружения OS, определенная как 'Windows_NT'.Таким образом, для Windows type используется команда, для не-Windows cat используется.

7 голосов
/ 25 апреля 2018

Намного проще, так как было добавлено $(file op filename):

VARIABLE = $(file < my_file.txt)

Страница руководства здесь: https://www.gnu.org/software/make/manual/html_node/File-Function.html#index-file_002c-reading-from

3 голосов
/ 06 августа 2018

Если вы используете GNU make, другой способ получить этот эффект - использовать make "include" другого make-файла:

Из Makefile:

include "./MyFile.mak"

Создать файл "MyFile.mak "с содержанием:

FILE := "my file content"
FILE += "more content 1"
FILE += "more content 2"
3 голосов
/ 12 ноября 2015

Поскольку платформа не была указана, именно так она работает в Solaris:

VERSION:sh = cat VERSION

all:
        echo $(VERSION)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...