Присвоить значение переменной make-файла результату команды удара?

Я пытаюсь присвоить вывод этой команды (который находится в моем make-файле) к var ЗАГОЛОВКА make-файла как в этом после строки кода:

HEADER = $(shell for file in `find . -name *.h`;do echo $file; done)

Проблема - это, если я печатаю ЗАГОЛОВОК в своем использовании make-файла:

print:
    @echo $(HEADER)

Я добираюсь

ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile ile

И если я выполняю эту команду непосредственно в консоли, и непосредственно где мой make-файл:

myaccount$ for file in `find . -name *.h`;do echo $file; done
./engine/helper/crypto/tomcrypt/headers/._tomcrypt_pk.h
./engine/helper/crypto/tomcrypt/headers/tomcrypt.h
./engine/helper/crypto/tomcrypt/headers/tomcrypt_argchk.h
./engine/helper/crypto/tomcrypt/headers/tomcrypt_cfg.h
./engine/helper/crypto/tomcrypt/headers/tomcrypt_cipher.h
./engine/helper/crypto/tomcrypt/headers/tomcrypt_custom.h
./engine/helper/crypto/tomcrypt/headers/tomcrypt_hash.h
./engine/helper/crypto/tomcrypt/headers/tomcrypt_mac.h
....

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

Какие-либо идеи?

42
задан Goles 3 March 2010 в 16:38
поделиться

2 ответа

Вам нужно будет дважды экранировать символ $ в команде оболочки:

HEADER = $(shell for file in `find . -name *.h`;do echo $$file; done)

Проблема в том, что make попытается раскрыть $ f как переменную, и поскольку ничего не находит, он просто заменяет его на "". Это оставляет вашей команде оболочки ничего, кроме echo ile , что она точно выполняет.

Добавление $$ указывает программе make разместить один $ в этой позиции, что приводит к тому, что команда оболочки выглядит именно так, как вы хотите.

74
ответ дан 26 November 2019 в 23:34
поделиться

Почему бы просто не сделать

HEADER = $(shell find . -name '*.h')
14
ответ дан 26 November 2019 в 23:34
поделиться