मैं साझा स्रोत कोड का उपयोग कर लिनक्स कर्नेल मॉड्यूल का एक सेट बना रहा हूं। जो मैं समझता हूं, मेकफ़ाइल को "मेकफ़ाइल" नाम दिया जाना चाहिए, इसलिए मुझे दो अलग-अलग मॉड्यूल बनाने के लिए उसी मेकफ़ाइल का उपयोग करना होगा। मैं एक ही स्रोत कोड के साथ, एक ही मेकफ़ाइल के भीतर दो अलग-अलग मॉड्यूल कैसे बना सकता हूं, लेकिन दो अलग-अलग बिल्ड विकल्पों के साथ?पेड़ कर्नेल मॉड्यूल से बाहर: एकाधिक मॉड्यूल, एकल मेकफ़ाइल, एक ही स्रोत फ़ाइल, विभिन्न बिल्ड विकल्प
उदाहरण के लिए, मेरे मॉड्यूल को मॉड्यूल 1 और मॉड्यूल 2 कहा जाता है। इसलिए मैं उन्हें परिभाषित करने के लिए निम्न पंक्ति है:
obj-m := module1.o module2.o
अन्य फ़ाइलों के अलावा, दोनों module1 और module2 एक ही स्रोत फ़ाइल code.c
उपयोग करने की आवश्यकता है, लेकिन विभिन्न निर्माण विकल्पों के साथ बनाया। तो कहते हैं कि उदाहरण के लिए, Makefile निम्नलिखित लाइनों में शामिल हैं:
module1-objs = module1_code.o other_code.o
module2-objs = module2_code.o other_code.o
मैं चाहता हूँ module1_code.o
और module2_code.o
code.c से बनाया जा सकता है, लेकिन विभिन्न विकल्पों के साथ। विशेष रूप से, मैं मैक्रो के बिना निर्मित मैक्रो परिभाषित -DPREPROCEFFOR_FLAG=1
, और module2_code.o
के साथ एक module1_code.o
चाहता हूं।
जो मैं समझता हूं, लिनक्स में प्रयुक्त मेकफ़ाइल की प्रणाली स्पष्ट रूप से अनुमान लगाती है कि "code.o" नामक ऑब्जेक्ट फ़ाइल के लिए, स्रोत फ़ाइल को "code.c" कहा जाता है, तो मैं इसे कैसे प्राप्त करूं? क्या संभव है? क्या ऐसा करने के लिए इससे अच्छा तरीका है?
आप अपनी मेकफ़ाइल को जो कुछ भी चाहते हैं उसका नाम दे सकते हैं। हालांकि डिफ़ॉल्ट रूप से केवल [कुछ फ़ाइल नाम] (http://www.gnu.org/software/make/manual/make.html#Makefile-Arguments) की तलाश करेंगे। किसी भी अन्य नाम के लिए आपको '-f' तर्क का उपयोग करने की आवश्यकता है। –
यदि आप प्रासंगिक ऑब्जेक्ट फ़ाइल की पूर्व शर्त के साथ अपनी ऑब्जेक्ट फ़ाइल के लिए एक विशिष्ट नियम देते हैं और लक्ष्य बनाने के नियमों का उपयोग आपके द्वारा वर्णित डिफ़ॉल्ट नियम के बजाय किया जाएगा। तो 'module1_code.o: code.c; <बनाने के लिए कमांड> '। –