"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > जीएनयू मेक का उपयोग करके समान नियमों के साथ एकाधिक निष्पादनयोग्य कैसे बनाएं?

जीएनयू मेक का उपयोग करके समान नियमों के साथ एकाधिक निष्पादनयोग्य कैसे बनाएं?

2024-11-07 को प्रकाशित
ब्राउज़ करें:267

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

जीएनयू मेक का उपयोग करके समान नियमों के साथ एकाधिक निष्पादनयोग्य का निर्माण

हालांकि स्कोन्स एक सक्षम निर्माण उपकरण है, वांछित कार्यक्षमता को लागू करना चुनौतीपूर्ण हो सकता है। जीएनयू मेक का उपयोग करना एक अधिक सरल दृष्टिकोण है, जो शीर्ष-स्तरीय और व्यक्तिगत परियोजना निर्देशिकाओं दोनों से आसान निर्माण और सफाई की अनुमति देता है।

मेकफ़ाइल सेटअप

प्रदान की गई मेकफ़ाइलें all_lessons निर्देशिका और व्यक्तिगत परियोजना निर्देशिका दोनों से निर्माण और सफाई सक्षम करें। प्रत्येक प्रोजेक्ट के निष्पादन योग्य को उसकी निर्देशिका के नाम पर रखा गया है। ]

all_lessons/ हैलो वर्ल्ड/ पाठ.सीपीपी मुख्य.सीपीपी सम और विषम/ पाठ.सीपीपी मुख्य.सीपीपी कैलकुलेटर/ पाठ.सीपीपी 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

सभी: %: फ़ॉरवर्ड_ # मुख्य मेकफ़ाइल पर अग्रेषित करके कोई भी लक्ष्य बनाएं $(MAKE) -C .. project_dirs=$(notdir ${CURDIR}) $@ .फ़ोनी: फ़ॉरवर्ड_

मेकफ़ाइल

# प्रोजेक्ट कॉन्फ़िगरेशन प्रोजेक्ट_डीआईआर:= $(शेल फाइंड * -मैक्सडेप्थ 0 -टाइप डी) निर्वासन := $(foreach dir,${project_dirs},${dir}/${dir}) सभी : ${exes} # नियम .दूसराविस्तार: ऑब्जेक्ट = $(patsubst %cpp,%o,$(वाइल्डकार्ड $(dir ${1})*.cpp)) # जोड़ना ${exes} : % : $$(कॉल ऑब्जेक्ट्स,$$*) मेकफ़ाइल g -o $@ $(फ़िल्टर-आउट मेकफ़ाइल,$^) ${LDFLAGS} ${LDLIBS} # .o संकलित करें और निर्भरताएँ उत्पन्न करें %o : %cpp मेकफ़ाइल 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 configuration

project_dirs := $(shell find * -maxdepth 0 -type d )
exes := $(foreach dir,${project_dirs},${dir}/${dir})

all : ${exes}

# rules

.SECONDEXPANSION:
objects = $(patsubst %.cpp,%.o,$(wildcard $(dir ${1})*.cpp))

# link
${exes} : % : $$(call objects,$$*) Makefile
    g   -o $@ $(filter-out Makefile,$^) ${LDFLAGS} ${LDLIBS}

# compile .o and generate dependencies
%.o : %.cpp Makefile
    g   -c -o $@ -Wall -Wextra ${CPPFLAGS} ${CXXFLAGS} -MD -MP -MF ${@:.o=.d} $<

.PHONY: clean
clean :
    rm -f $(foreach exe,${exes},$(call objects,${exe})) $(foreach dir,${project_dirs},$(wildcard ${dir}/*.d)) ${exes}

# include dependency files
-include $(foreach dir,${project_dirs},$(wildcard ${dir}/*.d))

[project_directory]$ ln -s ../project.mk मेकफ़ाइल # एक सिम्लिंक बनाएं [project_directory]$ make

शीर्ष-स्तरीय निर्देशिका से निर्माण

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

व्यक्तिगत परियोजना निर्देशिकाओं की सफाई

[project_directory]$ सीडी .. [all_lessons]$ साफ करें
all :
% : forward_ # build any target by forwarding to the main makefile
    $(MAKE) -C .. project_dirs=$(notdir ${CURDIR}) $@
.PHONY : forward_

सभी परियोजनाओं की सफाई

[all_lessons]$ साफ करें
            
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3