Назначить значение переменной makefile для результата команды bash? - PullRequest
39 голосов
/ 03 марта 2010

Я пытаюсь назначить вывод этой команды (которая находится в моем make-файле) в заголовочный файл make-файла, как в следующей строке кода:

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

Проблема в том, что если я печатаю HEADER в моем 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-файле.

Есть идеи?

Ответы [ 3 ]

70 голосов
/ 03 марта 2010

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

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

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

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

14 голосов
/ 03 марта 2010

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

HEADER = $(shell find . -name '*.h')
7 голосов
/ 03 августа 2013

В учебнике makefile предлагается использовать wildcard для получения списка файлов в каталоге. В вашем случае это означает:

HEADERS=$(wildcard *.h)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...