LINUX.ORG.RU

GCC куча объектных в одно место

 ,


0

1

Приветствую

Подскажите, как в makefile сложить все в одно место одной же командой, так что то ругается

gcc -c $(shell find ./lvgl/src -type f -name '*.c') -I./lvgl/ -o $@ $<

gcc: fatal error: cannot specify -o with -c, -S or -E with multiple files

★★★

Ответ на: комментарий от sigurd

не подходит тот пример, нужно рекурсивно по всем вложениям пройти, не понятно конечно, почему на вход я могу подать кучу файлов, а сохраняет он их в то же месте, где лежит makefile

да и нет у меня нигде никаких all, каждая цепочка отдельно собирает из кучи бинарник, т.е. мне надо вызвать четка make lvgl и все получил все либы там

ну надеюсь понятно объяснил )

wolverin ★★★
() автор топика
Последнее исправление: wolverin (всего исправлений: 1)
Ответ на: комментарий от wolverin

как все это потом пройти так же как это делает find не понимаю

Во-первых, почему бы использовать find в makefile, если ты понимаешь как это сделать. А во-вторых, можно же сразу указать путь куда складывать .o.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от no-such-file

пути там тоже у разных исходников в разных местах, уж проще тогда ничего не указывать и сложить в место запуска, но хочется покрасивее, либо я опять не понял про что речь.

wolverin ★★★
() автор топика
Ответ на: комментарий от annulen

вот такой мейк

lvgl:
gcc -c $(shell find ./lvgl/src -type f -name '*.c') -I./lvgl/

make lvgl и вся куча объектных файлов в одном месте без ошибок, никаких зависимостей нигде не указываю.

wolverin ★★★
() автор топика
Последнее исправление: wolverin (всего исправлений: 1)
Ответ на: комментарий от wolverin

вместо $(shell find *.c) в make есть своя команда $(wildcard *.c).
Без чтения доки на make - никак! Вот полезная статья - «Эффективное использование GNU Make» - http://citforum.ru/operating_systems/gnumake/

sigurd ★★★★★
()
Последнее исправление: sigurd (всего исправлений: 2)

То, что ты хочешь, никак с make не связано. make это утилита для сборки проекта с выявлением цепочек зависимостей одних файлов от других. Ты же хочешь просто пересобрать всё файлы, которые найдутся в файловой системе. Это можно сделать скриптом. Сам скрипт писать мне лень, но идея такая:

1) делаешь find, его вывод стримишь в while true; do read filename; ... done

2) для каждого прочитанного filename с помощью shell-подстановок заменяешь суффикс .c на .o и запускаешь gcc с нужными аргументами

firkax ★★★★★
()
Ответ на: комментарий от wolverin

ну так ты из make вызываешь шелл и им генеришь список файлов!

Зачем здесь make - непонятно! Однострочник проще сразу на bash писать.
Make нужен для генерации зависимостей файлов друг от друга, чтобы после правки одно файла компилился не только он сам, но и файлы, зависящие от него.

sigurd ★★★★★
()
Последнее исправление: sigurd (всего исправлений: 1)
Ответ на: комментарий от sigurd

ну так ты из make вызываешь шелл и им генеришь список файлов

и что с этим не так, мне нужно просто положить в то место, откуда исходник и ВСЕ, почему на вход можно гору исходников подать, а на выходе нельзя указать куда складывать то!?

wolverin ★★★
() автор топика
Последнее исправление: wolverin (всего исправлений: 1)