سؤال

أنا مطالب بكتابة وثائق لمشروعي الحالي الذي يسرد جميع ملفات .c ولكل ملف يسرد كل ملف .h الذي تم تضمينه بشكل مباشر أو غير مباشر في هذا الملف.

هذا مشروع كبير، وعلى الرغم من أن لدينا ملفات Makefiles التي تحتوي نظريًا على هذه المعلومات، إلا أن تلك الملفات غير صحيحة في بعض الأحيان (لقد ورثنا هذا المشروع من شركة أخرى).لقد كان علينا في كثير من الأحيان أن نفعل make clean ; make لكي تنعكس تغييراتنا فعليًا في إعادة الترجمة، لذلك لا أريد الاعتماد على ملفات Makefiles هذه.

فهل هناك أداة تتيح لنا إعطائها اسم ملف .c ومسار تضمين وتخبرنا بجميع ملفات .h التي تم تضمينها بشكل مباشر أو غير مباشر في ملف .c؟ليس لدينا أي شيء غريب مثل

#define my_include "some_file.h"
#include my_include

لذلك لا تحتاج الأداة إلى أن تكون مثالية.أي شيء يبحث في ملفات .c و.h في مسار التضمين للتضمين العادي سيكون جيدًا بدرجة كافية.

هل كانت مفيدة؟

المحلول

وماذا أفعل في بلدي ماكيفيلي هو

SRCS=$(wildcard *.c)

depend: $(SRCS)
    gcc -M $(CFLAGS) $(SRCS) >depend

include depend

وهذا يعني أنه إذا تم تحديث أي من الملفات المصدر، سيتم تشغيل القاعدة تعتمد، واستخدام -M دول مجلس التعاون الخليجي لتحديث ملف يسمى تعتمد عليها. ثم يتم تضمين هذا في makefile لتوفير قواعد التبعية كافة الملفات المصدر.

تأكد والتحقق من أن ملف محدثة قبل بما في ذلك، لذلك هذا يتوقف الحكم سيتم تشغيل إذا لزم الأمر كلما قمت بتشغيل جعل بدونك الحاجة إلى القيام ب "جعل تعتمد".

وهذا سيتم تشغيل أي وقت قد تغير أي ملف. لم يسبق لي ان وجدت هذه مشكلة، ولكن إذا كان لديك عدد كبير من الملفات في الدليل قد تجد أنه استغرق وقتا طويلا، وفي هذه الحالة قد تتمكن من محاولة وجود ملف التبعية واحد لكل ملف المصدر، مثل هذا:

SRCS=$(wildcard *.c)
DEPS=$(SRCS:.c=.dep)

%.dep : %.c
    gcc -M $(CFLAGS) $< >$@

include $(DEPS)

لاحظ أنه يمكنك استخدام -MM بدلا من -M للا تشمل رؤوس النظام.

نصائح أخرى

و"دول مجلس التعاون الخليجي -M file.c" يفعل ما تحتاج.

البديل لـ gcc -M هو com.fastdep.أفاد مؤلف Fastdep أن fastdep أسرع بعشر مرات من -M الخاص بدول مجلس التعاون الخليجي.إذا استغرق بناء المشروع بعض الوقت، فقد يكون fastdep يستحق المشاهدة.

استخدم SCons

$ scons --tree=all
scons: Reading SConscript files ...

scons: done reading SConscript files.
scons: Building targets ...
scons: `.' is up to date.
+-.
  +-SConstruct
  +-app
  | +-test.o
  | | +-test.c
  | | +-/include/PCI_1149_1.h
  | | +-/include/Pci.h
  | | +-/usr/bin/gcc
  | +-/usr/bin/gcc
  | +-/lib/libpci1149_64.a
  ...

في MSVC (2005 و 2008 على الأقل، إصدارات أخرى من المحتمل أيضا ولكن ليس VC6) يمكنك الحصول على مترجم لأقول لك كل الملفات التي تم تضمينها أثناء الترجمة. الإخراج هو مطول جدا، ولكن الكامل والسهل تحليل مع العين البشرية.

في إعدادات المشروع، انتقل إلى C / C ++> علامة التبويب خيارات متقدمة، وتبديل "عرض يشمل"، ثم إعادة بناء المشروع من الألف إلى الياء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top