"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية إنشاء ملفات تنفيذية متعددة بقواعد مماثلة باستخدام GNU Make؟

كيفية إنشاء ملفات تنفيذية متعددة بقواعد مماثلة باستخدام GNU Make؟

تم النشر بتاريخ 2024-11-07
تصفح:107

 How to Build Multiple Executables with Similar Rules Using GNU Make?

إنشاء ملفات تنفيذية متعددة بقواعد مماثلة باستخدام GNU Make

على الرغم من أن Scons هي أداة بناء قادرة، إلا أن تنفيذ الوظيفة المطلوبة قد يكون أمرًا صعبًا. هناك نهج أكثر وضوحًا وهو استخدام GNU Make، والذي يسمح بسهولة البناء والتنظيف من كل من أدلة المشاريع ذات المستوى الأعلى والفرد.

إعداد ملف Makefile

ملفات makefiles المتوفرة تمكين البناء والتنظيف من كل من دليل all_lessons وأدلة المشروع الفردية. تتم تسمية الملف القابل للتنفيذ لكل مشروع على اسم الدليل الخاص به.

هيكل المشروع

ولتحقيق ذلك، ستحتاج إلى إعداد هيكل مشروع مشابه للمثال المقدم:

all_lessons/ مرحبا بالعالم/ الدرس.cpp main.cpp Even_or_odd/ الدرس.cpp main.cpp آلة حاسبة/ الدرس.cpp user_created_add.cpp main.cpp
all_lessons/
    helloworld/
        lesson.cpp
        main.cpp
    even_or_odd/
        lesson.cpp
        main.cpp
    calculator/
        lesson.cpp
        user_created_add.cpp
        main.cpp

إنشاء محتويات الملف

project.mk

الكل : % :ward_ # قم ببناء أي هدف عن طريق إعادة التوجيه إلى ملف makefile الرئيسي $(MAKE) -C .. project_dirs=$(notdir ${CURDIR}) $@ .PHONY : Forward_

all :
% : forward_ # build any target by forwarding to the main makefile
    $(MAKE) -C .. project_dirs=$(notdir ${CURDIR}) $@
.PHONY : forward_
Makefile

# تكوين المشروع project_dirs := $(صدفة البحث * -أقصى عمق 0 -نوع د ) exes := $(foreach dir,${project_dirs},${dir}/${dir}) الكل: ${exes} # قواعد .التوسيع الثاني: الكائنات = $(patsubst %.cpp,%.o,$(wildcard $(dir ${1})*.cpp)) # وصلة ${exes} : % : $$(استدعاء الكائنات،$$*) Makefile g -o $@ $(ملف Makefile بعد التصفية،$^) ${LDFLAGS} ${LDLIBS} # تجميع .o وإنشاء التبعيات %.o : %.cpp Makefile g -c -o $@ -Wall -Wextra ${CPPFLAGS} ${CXXFLAGS} -MD -MP -MF ${@:.o=.d} $

all :
% : forward_ # build any target by forwarding to the main makefile
    $(MAKE) -C .. project_dirs=$(notdir ${CURDIR}) $@
.PHONY : forward_
الاستخدام

البناء من الأفراد دلائل المشروع

[project_directory]$ ln -s ../project.mk Makefile # إنشاء رابط رمزي [project_directory]$ make

all :
% : forward_ # build any target by forwarding to the main makefile
    $(MAKE) -C .. project_dirs=$(notdir ${CURDIR}) $@
.PHONY : forward_
البناء من دليل المستوى الأعلى

[all_lessons]$ make

[all_lessons]$ make

[project_directory]$cd .. [all_lessons]$ جعل نظيف

[project_directory]$ cd ..
[all_lessons]$ make clean

[all_lessons]$ جعل نظيف

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3