Как обнаружить изменения заголовка в списке зависимостей make - PullRequest
6 голосов
/ 13 августа 2010

После почти десятилетия программирования на C # и VC ++ я возвращаюсь к среде linux - g ++ - make - emacs.

Попытка освежить память о записи файла make У меня не было много проблем, но я наткнулся на следующую проблему, которая, как я признаю, не помню, как я решал ее в прошлом:

Допустим, что конкретный файл .cpp имеет некоторые зависимости от нескольких других файлов заголовков (за исключением соответствующего заголовка, который легко обрабатывать) ... Каков наилучший способ обнаружить, что некоторые из файлов .h были изменены?

Мне, конечно же, не нравится идея помещать их в мой целевой список, поскольку это ручной и подверженный ошибкам процесс!

Простой ответ, конечно, состоит в том, чтобы построить чистую всякий раз, когда есть изменение .h, но я не могу вспомнить, что было стандартным способом….

В VC ++ мне не приходилось сталкиваться с этим, поскольку среда IDE очень хорошо справлялась с зависимостями…

Ответы [ 3 ]

6 голосов
/ 13 августа 2010

Посмотрите на автоматизированные зависимости . gcc с флагами -M -MD -MT и т. д. проанализирует ваш файл и вычислит зависимости. Передайте их через седь. Google найдет много примеров.

2 голосов
/ 13 августа 2010

deinst и idimba вы на правильном пути. Чтобы прочитать о потенциальных ловушках, с которыми вы можете столкнуться, и о том, как их избежать, ознакомьтесь с этой статьей.

http://mad -scientist.net / сделать / autodep.html

1 голос
/ 13 августа 2010

Как уже упоминалось @deinst, gcc имеет возможность выводить все заголовочные файлы, которые ваш cpp использует прямо или косвенно. Что вам нужно примерно следующее:

obj-file: src-file

# dep file should be recreated each time header file or header file it depends on is changed
dep-file: src-file 
    gcc -M ...... > dep-file
    modify dep-file to make dep-file depend and all header files too

include dep-file

Это было реализовано однажды в проекте, которым я занимался, но полная реализация идеи была долгой и хитрой.

Если у вас есть возможность, рассмотрите инструменты более высокого уровня, поддерживающие автозависимость, такие как cmake или scons . Я лично работал с cmake - каждый программист может написать файл cmake, и автозависимость бесплатна.

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