![]() |
|
![]() ![]() ![]() |
|
avn |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 25.10.2005 Репутация: нет Всего: нет |
Доброго времени суток!
Такой у меня вопрос. Я пытаюсь в makefile получить в переменную список всех файлов *.C, *.CPP, *.S в текущей директории и всех поддиректориях. И как-то не могу разобраться в этом... Т. е. все бы хорошо если бы я получил список всех поддиректорий, их поддиректорий и т. д. - рекурсия. Но, похоже, make не имеет штатных средств. Я работаю в Windows. Там можно сделать так: dir /A /B /S *.cpp . На выходе шикарный списочек - то, что мне нужно. В Unix, я так понимаю, можно извратиться с ls соответствующим образом (кстати, не получилось - может, кто подскажет?..). Пытаюсь вписать строку в makefile: all_files := $(shell dir /A /B /S *.c) Получаю: /bin/sh: dir: command not found Пишу иначе: all_files := $(shell 'dir /A /B /S *.c') Получаю: process_begin: CreateProcess(NULL, "dir /A /B /S *.c", ...) failed. Как поступить в таком случае? Подскажите, потому что я уже ![]() Добавлено через 3 минуты и 11 секунд Если написать $(shell LS -R), то что-то получается. Но LS -R дает совершенно не тот вывод, что нужно. Мне нужно строго в виде: FILE.C DIR1/FILE1.C DIR1/FILE2.C DIR1/DIR2/FILE2.C DIR3/FILE2.C Наверное, тут как-то можно с foreach чего-нибудь придумать, но я пока застрял... |
|||
|
||||
avn |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 25.10.2005 Репутация: нет Всего: нет |
Смог решить НЕ-ИДЕАЛЬНО, но работает:
Если кто знает более элегантное решение - пишите! |
|||
|
||||
leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
Вообще-то так делать не принято. Принято хардкодить имена файлов в Makefile, а поиском файлов занимается генератор мейкфайла.
Но если очень нужно... Потому что Не существует "dir.exe". Есть команда "dir" в cmd.exe. Можно так: "$(shell cmd /c dir ...)". Но лучше использовать встроенные make функции для получения списка файлов в директории (без использования $(shell). Добавлено через 14 минут и 35 секунд Если Makefile только 1, есть вариант собрать *.c файлы в текущем каталоге, найти подкаталоги, и для каждого найденного перезапускать $(MAKE) с параметрами -C и -f. Он, если надо, пойдет еще глубже, итд. |
|||
|
||||
avn |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 25.10.2005 Репутация: нет Всего: нет |
Не работает - тупо зависает.
Вот их-то я и не нашел.
А Вы можете пример привести? |
||||||
|
|||||||
leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
Я так не помню.
Для поиска надо использовать со слэшом на конце, типа: DIRS = $(wildcard */) потом каждый из DIRS считать таргетом. как-то так:
тут должен быть TAB, а не пробелы, но движок форума его порезал Добавлено @ 17:36 Всё здесь: http://www.gnu.org/savannah-checkouts/gnu/....html#Recursion Добавлено @ 17:39 Вероятно, запускает интерактивный. Попробуйте //c (с двумя слэшами). Mingw - он такой Это сообщение отредактировал(а) leniviy - 24.3.2014, 17:40 |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | GNU toolchain | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |