GNU make: создать список исходных файлов

Нормально ли автоматически создавать список исходных файлов (.c, .cpp и т. Д., А не заголовков)?

Как бы ты это сделал? Я думаю использовать find и sed.

РЕДАКТИРОВАТЬ: проект представляет собой библиотеку. Все исходные файлы находятся внутри каталога проекта. Никаких посторонних исходных файлов нет. Все объектные файлы создаются с использованием одних и тех же параметров компилятора. Я думаю создать список всех исходных файлов, а затем файл зависимостей для каждого исходного файла, следуя пути Троми. Это жизнеспособный подход?

БОЛЬШЕ РЕДАКТИРОВАНИЯ: это довольно большая библиотека C ++. Проект находится в стадии разработки. Очень желательно свести к минимуму перекомпиляцию.

Спасибо.


person pic11    schedule 17.04.2011    source источник
comment
Сгенерировать их из чего? Список файлов .o?   -  person bmargulies    schedule 17.04.2011


Ответы (2)


В GNU make вы можете использовать подстановочные знаки. См. Пример в этом вопросе.

person Nicholas Riley    schedule 17.04.2011
comment
Показывает, как создавать зависимости. Это нужно для минимизации перекомпиляции. - person pic11; 17.04.2011
comment
затем вы используете обычный механизм make зависимостей ... множество примеров. - person Nicholas Riley; 18.04.2011

Нормальный? Это обычное дело, но не мудро.

Многие люди используют подстановочные знаки Make или find или что-то подобное, чтобы создать список всех исходных файлов, которые существуют в определенном дереве каталогов, затем передать их компилятору и связать объекты вместе. Это хрупкое решение, которое доставит вам неприятности. Если возникает конфликт между исходными файлами (например, два отдельных определения void foo()), компоновщик пожалуется, и может быть неочевидно, как исправить проблему. Вы можете столкнуться с огромным количеством исходных файлов, многие из которых не нужны вашему проекту, что замедлит вашу сборку и вызовет конфликты. И если вы хотите использовать некоторые из этих источников (но не все) в другом исполняемом файле, вам придется прибегнуть к символическим ссылкам или какой-либо другой кладжери.

Лучше всего указать в make-файле, какие объекты необходимы для данной цели, а затем позволить Make выяснить, какие источники использовать. В этом и хорош Make. Нет надежного способа поддерживать списки объектов автоматически, вам просто нужно делать это вручную, но это не так уж и много; если вы меняете их достаточно часто, и это становится настоящей рутиной, значит, вы делаете что-то не так.

РЕДАКТИРОВАТЬ:
Если проект представляет собой библиотеку, как вы описываете, то да, это жизнеспособный и довольно хороший метод. И метод Троми будет работать очень хорошо, чтобы предотвратить ненужную перекомпиляцию.

person Beta    schedule 17.04.2011
comment
Я отредактировал свой вопрос. Это библиотека. нестабильны только файлы, принадлежащие проекту, все остальное не изменится, пока проект разрабатывается. - person pic11; 17.04.2011
comment
На данном этапе я бы сказал, что если вам нужно иметь несколько групп источников, то желательно также сгруппировать их в отдельные папки, чтобы сопровождающие могли понять, что и где используется! - person Matthieu M.; 18.04.2011
comment
@Matthieu M .: Я согласен, но я бы добавил, что каждый каталог должен содержать самодостаточный набор источников, который может быть скомпилирован и протестирован, не полагаясь на другие каталоги (или, самое большее, для этого потребуется несколько простых заглушек для внешние источники). Если исходники не могут быть разделены так чисто, я считаю это признаком проблем с дизайном интерфейса. - person Beta; 18.04.2011