आप कई बातें कर सकते हैं:
(1) एक समाधान अपने सभी Makefile.am
रों पर एक आम makefile टुकड़ा शामिल करने के लिए है: उस मामले में
include $(top_srcdir)/common.mk
...
bin_PROGRAMS = foo
foo_SOURCES = ...
आप
AM_CXXFLAGS = -fpic -Wall -Wextra
लिखते थे common.mk
को और भविष्य में इस फ़ाइल को संपादित करके सभी Makefile.am
के लिए अधिक मैक्रोज़ या नियम जोड़ना आसान हो जाएगा।
(2) एक अन्य समाधान अपने configure.ac
में विश्व स्तर पर इन चरों स्थापित करने के लिए (नाम configure.in
बहुत पहले पदावनत किया गया है) के रूप में में, होगा:
...
AC_SUBST([AM_CXXFLAGS], [-fpic -Wall -Wextra])
...
तो फिर तुम भी कुछ भी कहने के लिए नहीं है आपके Makefile.am
एस में, वे स्वचालित रूप से इस वैश्विक परिभाषा का उत्तराधिकारी हैं। दोष यह है कि आप आसानी से ऑप्ट-आउट नहीं कर सकते हैं (पहले समाधान के साथ common.mk
शामिल न करने का निर्णय लेना आसान है) और निर्भरता तीसरे पक्ष के लोगों के लिए वास्तव में स्पष्ट नहीं है (जब वे Makefile.am
पढ़ते हैं तो उनके पास कोई संकेत नहीं है झंडे से आ सकते हैं)।
(3) एक तीसरा समाधान orsogufo के रूप में करना होगा सुझाव दिया गया है: configure.ac
में उपयोगकर्ता चर CXXFLAGS को ओवरराइट करना। मैं इसके खिलाफ सलाह दूंगा, क्योंकि यह जीएनयू बिल्ड सिस्टम की विशेषताओं में से एक को हरा देता है: उपयोगकर्ताओं को इस चर को make
-टाइम पर ओवरराइड करने की अनुमति है। उदाहरण के लिए आप जब कोड का एक टुकड़ा डिबगिंग टाइप करने के लिए
make CXXFLAGS='-O0 -ggdb'
चाहते हो सकता है, और इस CXXFLAGS
के किसी भी परिभाषा (लेकिन नहीं उन AM_CXXFLAGS
में) ऊपर लिख देगा। ईमानदार होने के लिए, अधिकांश परियोजनाएं इसे सही तरीके से समर्थन करने में विफल होती हैं क्योंकि वे CXXFLAGS
के साथ चालें बजाती हैं।
अंत में, मुझे यह उल्लेख करना चाहिए कि -fpic
, -Wall
, और -Werror
पोर्टेबल विकल्प नहीं हैं। अपनी प्रोजेक्ट के दायरे के आधार पर आप इन (gnulib ने चेतावनी झंडे के परीक्षणों के लिए हाल ही में अधिग्रहित नए मैक्रोज़ के लिए कॉन्फ़िगरेशन चेक जोड़ना चाहेंगे, और libtool साझा पुस्तकालयों के निर्माण के लिए उपयोग किया जा सकता है)।
Makefile.am में मुहावरा शामिल का उपयोग Makefile और Makefile.in के लिए उत्पादन निर्भरता के कारण automake कि अंततः को वापस पाने के कर देगा फ़ाइल और automake फ़ाइल शामिल थे। तो इसे बदलने से बाद में अपडेट भी हो जाएंगे। – johnny
यदि आप ध्वज AC_SUBST करते हैं तो यह वास्तव में ऑप्ट आउट करना बहुत आसान है। Makefile.am में, यदि आप AM_CPPFLAGS असाइन करते हैं, तो वे ओवरराइड करते हैं। आप कुछ भी नहीं कर सकते हैं, या AM_CPPFLAGS = @ AM_CPPFLAGS @ ... करके, या असाइनमेंट में @ AM_CPPFLAGS @ डालकर ऑप्ट आउट कर सकते हैं। –
चेतावनी झंडे सीपीपीएफएलजीएस में आपके जैसा दावा नहीं करते हैं, क्योंकि वे प्री-प्रोसेसर के विपरीत कंपाइलर द्वारा उपयोग किए जाते हैं। – kusma