Как автоматически генерировать MakeFile от зависимостей #include только в исходных файлах C ++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как автоматически генерировать MakeFile от зависимостей #include только в исходных файлах C ++?

Сообщение Anonymous »

мотивация
Я хочу автоматически генерировать Makefile с помощью исполняемых целей C ++, используя только информацию #include в исходных файлах. Цель состоит в том, чтобы устранить избыточность между исходными зависимостями и ручными объявлениями Makefile
Пример
📁 Простая структура проекта

Код: Выделить всё

project/
├── exec.cpp
├── util.hpp
├── Makemakefile
< /code>
📄 exec.cpp < /p>
#include "util.hpp"
#include 

int main() {
std::cout 
📄 util. < /p>
#include "util.hpp"
int add(int a, int b) {
return a + b;
}
< /code>
📄 И я хочу, чтобы этот Makefil был сгенерирован: < /p>
Примечание: вкладки могут появиться в виде пространств в фрагменте Makefile ниже. Обязательно используйте реальные символы вкладок для командных строк при копировании < /p>
# Makefile generated by MakeMakefile (Copyright J. Saint-Martin)
CXX = g++
CXXFLAGS = -Wall -Wextra -std=c++17 -MMD -MP

all: \
exec

exec: exec.o \
util.o
$(CXX) $(CXXFLAGS) $^ -o $@

%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@

clean:
rm -f exec
rm -f *.o *.d

help:
@echo "Target available : all, clean, help, exec"
Почему это не дубликат
(это относится к предложенному вопросу: «Могу ли я скомпилировать все файлы .cpp в src/to .o's in obj/, затем ссылаться на бинарное значение в ./? Мой вопрос отличается: я предлагаю общий и многоразовый сценарий (makemakefile), который динамически генерирует создание на основе конвенций проекта. Он обеспечивает минимальные и полные зависимости, анализируя директивы #include, не полагаясь на внешние инструменты, такие как GCC -M или MakeDepend. Мой подход не зависит от макета каталогов и фокусируется на логике зависимости, а не только на размещении файлов.
Отказ от ответственности разработчика
Если вы собираетесь прокомментировать, убедитесь, что вы прочитали прошлую основную часть

Подробнее здесь: https://stackoverflow.com/questions/797 ... in-c-sourc
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»