مقدمه مقدماتی

در برنامه نویسی C، یک برنامه اغلب در فایل های منبع متعدد و فایل های هدر تقسیم می شود تا سازمان را بهبود بخشد، قابلیت استفاده و سرعت کامپایل را بهبود بخشد، با این حال، این ماژولاریک چالش را معرفی می کند: هنگامی که یک فایل هدر تغییر می کند، هر فایل منبع که شامل آن می شود، باید یک فایل های اطمینان فایل فایل خودکار را به صورت دستی تنظیم کند، خطا و زمان بارگذاری شده است.

فایل های Makefiles چیست؟

در این میان، یک فایل ساده و متن است که مجموعه ای از قوانین را برای ساخت یک پروژه تعریف می کند. [۱] [۱۰] [۱] [FLT: ۱] این قوانین را می خواند، و فقط دستورات لازم را برای ساخت فایل ها به روز می آورد: ایده اصلی ساده است: هر قانون دارای یک از (۳) هدف است (F:۳)

فایل های Makefiles از دهه 1970 بخشی از یونیکس بوده اند و GNU Make استاندارد de facto در لینوکس و macOS است.این نحو مختصر است اما می تواند ظریف باشد؛ گرفتن وابستگی به حق مهارت اولیه ای است که توسعه دهنده C نیاز دارد.

درک وابستگی ها

در یک پروژه C، وابستگی ها به فایل های محدود نمی شوند؛ هر فایل منبع شامل یک یا چند فایل هدر (به عنوان مثال، ) است، اگر یک هدر اصلاح شود، همه فایل های که شامل آن باید به طور مشابه، فایل های شی بستگی به فایل های مربوطه (FLT:3) و فایل های نهایی بستگی دارد.

درخواست در مقابل وابستگی های درخواست

در اوایل فایل ها، برنامه نویسان تمام پیش نیاز ها را به صورت دستی ذکر کردند.این رویکرد شکننده است: فراموش کردن یک هدر به معنی است که استال ایجاد می کند، در حالی که لیست های اضافی بسیاری باعث ایجاد مجدد غیر ضروری می شوند، زیرا پروژه رشد می کند، لیست های دستی غیر قابل نگهداری می شوند.راه حل مدرن این است که وابستگی ها را به طور خودکار تولید کند، تبدیل آنها به پیش نیازهای ضمنی، پیش بینی ماشین.

در این میان، یک طرح به خوبی اجرا شده است که به عنوان یک نگرانی درجه اول عمل می کند. [۱] هدف هرگز بازسازی چیزی که نیازی به بازسازی ندارد و همیشه همه چیز را که انجام می دهد، بازسازی می کند.

ساختار پایه یک فایل Makefile

یک فایل معمولی شامل تعاریف متغیر، قوانین و اهداف جعلی است، در اینجا یک مثال حداقل اما عملکردی برای یک پروژه با و :

CC = gcc
CFLAGS = -Wall -Wextra -O2

main: main.o utils.o
 $(CC) $(CFLAGS) -o main main.o utils.o

main.o: main.c
 $(CC) $(CFLAGS) -c main.c

utils.o: utils.c
 $(CC) $(CFLAGS) -c utils.c

clean:
 rm -f main main.o utils.o

این فایل دارای چهار هدف است: [FLT-7] (اجرای)، دو فایل شی و یک هدف جعلی خطوط وابستگی پس از کولون به آن می گویند که فایل ها قبل از تصمیم به بازسازی هدف بررسی می کنند.

اهداف جعلی

و یا از جمله (و یا از آن) استفاده کنید و یا از آن استفاده نکنید.

.PHONY: clean all

اگر این گونه باشد، اگر فایلی به نام FLT:12 وجود داشته باشد، آن را به روز و از دستور کار حذف کنید.

مدیریت وابستگی ها به طور موثر

در این میان، در این کتاب، به صورت جدی به کار گرفته شده است: «مَنْمَهَهَهُمَهُمَهُوا مَنَ الْمَنَ الْمَهُمَهُوا مَنَ الْمَهُواَهُمَهُوا مَهُمَهُوا مَهُوا مَهُمَهُمَهُوا مَهُوا مَهُوا مَهُوا مَهُوا مَهُمَهُمَهُمَهُمَهُمَهُمَهُوا مَهُوا مَهُمَهُمَهُمَهُوا مَهُمَهُوا مَا مَهُمَهُمَهُمَاَهُوا مَهُمَهُمَهُمَهُمَنَهُوا مَهُمَهُمَنَهُمَنَنَاَهُم

نسل وابستگی خودکار با GCC

GCC (و Clang) می تواند اطلاعات وابستگی را با استفاده از خانواده پرچم (FLT:18) تولید کند.این ترکیب عملی برای اکثر پروژه ها است (FLT 19: 19).

  • [FLT 1:] یک فایل وابستگی ( را در هنگام جمع آوری، فهرست تنها هدرهای تعریف شده کاربر (نه هدرهای سیستم) می نویسد.
  • [FLT 22] [FLT 1] [FLT 1] - نام فایل وابستگی را مشخص می کند.
  • [FLT3] [FLT 1] - اهداف جعلی برای هر هدر اضافه می کند، جلوگیری از خطا در هنگام حذف سر.

در اینجا چگونگی ترکیب ردیابی وابستگی خودکار به یک فایل Makefile را در اینجا ذکر شده است:

CC = gcc
CFLAGS = -Wall -Wextra -O2 -MMD -MP
SRCDIR = src
OBJDIR = obj
SRCS = $(wildcard $(SRCDIR)/*.c)
OBJS = $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(SRCS))
DEPS = $(OBJS:.o=.d)

all: myprogram

myprogram: $(OBJS)
 $(CC) $(CFLAGS) -o $@ $^

$(OBJDIR)/%.o: $(SRCDIR)/%.c
 @mkdir -p $(OBJDIR)
 $(CC) $(CFLAGS) -c $< -o $@

-include $(DEPS)

.PHONY: all clean
clean:
 rm -rf $(OBJDIR) myprogram

توضیح:

  • [FLT 25] جمع آوری همه (FLT 26 [در فهرست منبع].
  • [در این میان]، آنان را به سمت مسیر فایل های شی تبدیل می کند.
  • [در این میان]، فایل های وابسته (مانند [FLT 29] را فهرست کنید.
  • در این میان، هر یک از این فایل ها را به صورت زیر به کار می برند و به دلیل استفاده از فایل های (FLT:32) یک فایل (FLT:33) به عنوان یک اثر جانبی ایجاد می کند.
  • در این میان، این کتاب به صورت زیر به صورت زیر به صورت زیر به صورت زیر به صورت زیر به صورت زیر به صورت زیر به صورت زیر به صورت زیر به صورت زیر می رود.

اگر [در این باره] تغییر کند، پس در آینده [FLT 39] [FLT 39] به صورت خودکار [FLT41] تغییر خواهد کرد، زیرا فایل شامل به عنوان پیش نیاز است.

تکنیک های پیشرفته

مدیریت وابستگی های ژنتیکی ایمن

هنگامی که یک بار از آن حذف می شود، فایل هنوز هم می تواند آن را مرجع کند، و موجب می شود که با یک خطای هدف از دست رفته، این را با اضافه کردن قوانین جعلی خالی برای هر هدر وابستگی، اگر هدر رفته است، [FLT2] ایجاد کنید [FLT3] که به سادگی اجرا می شود و هیچ چیز ادامه نمی دهد.

شامل فایل های وابسته پس از تغییرات منبع

اگر یک فایل منبع اضافه یا حذف یک فایل ، فایل مربوطه باید بازسازی شود، زیرا فایل پیش نیاز فایل شی است، ساخت زمان تغییر و recompile را که به طور خودکار بازسازی فایل 49.

استفاده از دستور-فقط پیش فرض

گاهی اوقات قبل از ساخت به یک پوشه نیاز دارید، اما نمی خواهید که آن را به صورت منظم بازسازی کنید، این نقش پیش نیاز (FLT:0) سفارش است؛ یک جایگزین است:

$(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR)
 $(CC) $(CFLAGS) -c $< -o $@

$(OBJDIR):
 mkdir -p $@

این تضمین می کند که دایرکتوری قبل از هر مجموعه ایجاد شده است، اما تغییر به خود دایرکتوری (به عنوان مثال، یک فایل جدید در داخل) باعث ایجاد مجدد نمی شود.

بهترین روش ها برای مدیریت وابستگی ها

  1. استفاده از نسل وابستگی خودکار از روز اول.[۱۰] حتی برای یک پروژه فایل تک، آن را یک عادت خوب است.
  2. (FLT:0) فایل های وابسته را از فایل های منبع جدا کنید.[۱۰] آنها را در یک قرار دهید یا دایرکتوری را تمیز کنید و از درهم تنیده شدن درخت منبع اجتناب کنید.
  3. [در این میان] پس از آنکه قوانینی را که ایجاد می کنند، فایل های تولید شده را حذف کنید.[۱۰] [۱] دستورالعمل [FLT] خوب است، اما پس از اجرای قانون الگو، آن را به کار می برد.
  4. [در این باره] از اهداف جعلی برای نگهداری خانه استفاده کنید.[۱][۵][۵][۵][۵][۵][۵][۵][۵][۵][۲][۵][۲][۲][۲][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۲][۲][۵][۲][۲][۲][۲][۲][۲][۲][۵][۵][۵][۲][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۲][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۵][۲][۵][۵][۵][۲][۲][۲][۲][۵][۵][۵][۵][۲][۲][۲][۵][۵][۵][۵][۵][۲][۲][۲][۵][۲][۲][۲][۲][۲][۲][۲][۲][۲][۵][
  5. [0] متغیرهای پرتال برای پرچم های کامپایلر، دایرکتوری های منبع و لیست فایل ها.[۱۰] این باعث می شود که فایل های قابل استفاده مجدد در سراسر پروژه ها و سفارشی سازی آسان تر شود.
  6. فایل خود را با یک تغییر سر و صدا دقیق تست کنید.[۱۰] اصلاح یک سر و صدا، اجرا و تایید تنها فایل های شی آسیب دیده دوباره ثبت می شوند اگر یک بازسازی کامل اتفاق بیفتد، چیزی با ردیابی وابستگی اشتباه است.
  7. فایل را ساده اما ساده تر از لازم نگه دارید.[۱۰] بیش از مهندسی با توابع پیشرفته مانند می تواند باعث شود که دیژل دردناک باشد.

منابع خارجی

برای عمیق تر کردن درک خود، با این ارجاعات معتبر مشورت کنید:

نتیجه گیری

مدیریت وابستگی های برنامه C با فایل های آرایش یک لوکس نیست، بلکه یک ضرورت برای هر پروژه ای است که یک فایل واحد را بیرون می کشد، با ترکیب قوانین الگو، نسل وابستگی خودکار با و اضافه کردن دقیق وابستگی تولید شده (FLT:69 فایل، شما می توانید یک سیستم ایجاد کنید که سریع و اصلاح تکنیک های نشان داده شده در اینجا ردیابی دستی را حذف کرده و باعث می شود تا زمانی که شما فایل های ظریف را اجرا کنید.