కోడ్ ఫైల్ విలువైనదిగా చేయడానికి ఒకటి లేదా అంతకంటే ఎక్కువ కోడ్ లైన్లను కంటెంట్గా కలిగి ఉన్నట్లే, ప్రాథమిక మేక్ఫైల్ వేరియబుల్స్, నియమాలు మరియు లక్ష్యాలను ఉపయోగించి రూపొందించబడింది. అలా కాకుండా, ఎటువంటి సమస్యలు లేకుండా పూర్తి మేక్ఫైల్ చేయడానికి అవసరమైన ఇతర అంశాలు కూడా ఉన్నాయి. ఈ గైడ్లో, మేక్ఫైల్ వ్రాసేటప్పుడు ప్రాథమిక మేక్ఫైల్ సింటాక్స్ మరియు సాధారణ సమస్యలను చర్చిస్తాము మరియు ఆ సమస్యలను పరిష్కరించడానికి పరిష్కారాలను అందిస్తాము.
మేక్ఫైల్ బేసిక్ సింటాక్స్ను అర్థం చేసుకోవడం
మేక్ఫైల్ సృష్టిని ప్రారంభించడానికి, మేక్ఫైల్ కోడ్ ఉదాహరణ ద్వారా మేక్ఫైల్ యొక్క ప్రాథమిక లక్షణాలను మేము వివరిస్తాము. ఎక్జిక్యూటబుల్ ఫైల్ని పొందడానికి మేక్ఫైల్ కంటెంట్లో కింది సింటాక్స్ ప్రాపర్టీలను చేర్చడం అవసరం:
వేరియబుల్ s: మేక్ఫైల్లో ఉపయోగించడానికి అవసరమైన వస్తువులను నిల్వ చేసే ప్రాథమిక డేటా. కంపైలర్, ఫ్లాగ్లు, సోర్స్ ఫైల్లు, ఆబ్జెక్ట్ ఫైల్లు మరియు టార్గెట్ ఫైల్లను పేర్కొనడానికి ఈ వేరియబుల్స్ ఉపయోగించబడతాయి. కింది నమూనా మేక్ఫైల్లో, మొత్తం ఐదు వేరియబుల్స్ ఉన్నాయి, అవి CXX (C++ కంపైలర్ను సెట్ చేయడానికి), CXXFLAGSc (కంపైలర్ ఫ్లాగ్లు), TARGET (టార్గెట్ ఎక్జిక్యూటబుల్ ఫైల్ పేరును సెట్ చేయడానికి), SRCS (సోర్స్ కోడ్ ఫైల్ను సెట్ చేయడానికి) , OBJS (సోర్స్ కోడ్ ఫైల్ ద్వారా రూపొందించబడిన ఆబ్జెక్ట్ ఫైల్లను కలిగి ఉండటానికి).
లక్ష్యాలు: మూలం నుండి నిర్మించబడుతుందని ఆశించిన అవుట్పుట్. ఇది లక్ష్య ఫైల్ లేదా ఏదైనా సింబాలిక్ పేరు కావచ్చు: “అన్నీ” అనేది “టార్గెట్” వేరియబుల్ ద్వారా నిర్మించబడే డిఫాల్ట్ లక్ష్యం, “$TARGET” అనేది “OBJS” వేరియబుల్స్పై ఆధారపడి ఉంటుంది మరియు “క్లీన్” లక్ష్యం లక్ష్యాన్ని తొలగిస్తుంది మరియు పని చేసే డైరెక్టరీ నుండి ఆబ్జెక్ట్ ఫైల్స్.
నియమాలు మరియు బిల్డ్ ఆదేశాలు: మూలాధార ఫైల్ లేదా డిపెండెన్సీల నుండి లక్ష్యాన్ని సృష్టించడానికి అమలు చేయవలసిన ప్రాథమిక సూచనల సమితి. ఉదాహరణకు, '%.o: %.cpp' నియమం 'cpp' పొడిగింపుతో ఉన్న ఫైల్ 'o' పొడిగింపుతో ఆబ్జెక్ట్ ఫైల్ను సృష్టించడానికి ఉపయోగించబడుతుందని ప్రదర్శిస్తుంది, అయితే రెండు ఫైల్లు ఒకే పేరును కలిగి ఉంటాయి. మరోవైపు, బిల్డ్ కమాండ్ $(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJS) ఒక ఆబ్జెక్ట్ ఫైల్ మరియు కొత్త టార్గెట్ ఫైల్ని ఒకదానితో ఒకటి లింక్ చేయడానికి ఉపయోగించబడుతుంది. అదే విధంగా, బిల్డ్ కమాండ్ $(CXX) $(CXXFLAGS) -c $< -o $@ సోర్స్ ఫైల్ను ఆబ్జెక్ట్ ఫైల్గా కంపైల్ చేస్తుంది.
ఆధారపడటం: మీరు మేక్ఫైల్ను సృష్టించాలనుకున్నప్పుడు డిపెండెన్సీలు ఎల్లప్పుడూ ఉంటాయి. ఉదాహరణకు, 'అన్ని' లక్ష్యం 'TARGET' వేరియబుల్పై ఆధారపడి ఉంటుంది, అయితే 'TARGET' 'OBJS' వేరియబుల్పై ఆధారపడి ఉంటుంది. అదే సమయంలో, “OBJS” వేరియబుల్ “SRCS” వేరియబుల్ ద్వారా సోర్స్ ఫైల్పై ఆధారపడి ఉంటుంది.
వ్యాఖ్యలు: మీరు చాలా కాలం తర్వాత ఫైల్ని ఉపయోగిస్తుంటే, కోడ్ లైన్ యొక్క ప్రయోజనాన్ని వివరించడానికి సాధారణంగా మానవులకు అర్థమయ్యే సూచనలు ఉపయోగించబడతాయి. కింది మేక్ఫైల్లో, మేము ప్రతి పంక్తిని వివరించడానికి “#” గుర్తుతో ప్రారంభమయ్యే వ్యాఖ్యలను ఉపయోగిస్తాము.
CXX = g++
CXXFLAGS = -ఎస్టీడీ =c++ పదకొండు - గోడ
TARGET = కొత్తది
SRCS = main.cpp
OBJS = $ ( SRCS:.cpp=.o )
అన్నీ: $ ( TARGET )
$ ( TARGET ) : $ ( OBJS )
$ ( CXX ) $ ( CXXFLAGS ) -ఓ $ ( TARGET ) $ ( OBJS )
% .ఓ: % .cpp
$ ( CXX ) $ ( CXXFLAGS ) -సి $ < -ఓ $ @
శుభ్రం:
rm -ఎఫ్ $ ( TARGET ) $ ( OBJS )
సాధారణ సమస్యలు మరియు పరిష్కారాలు
ఏదైనా మేక్ఫైల్ను వ్రాస్తున్నప్పుడు, చివర్లో కావలసిన అవుట్పుట్ను పొందడానికి ప్రతి చిన్న వివరాలను పరిగణనలోకి తీసుకోవడం అవసరం. మేక్ఫైల్ను సృష్టించేటప్పుడు వినియోగదారులు తరచుగా కొన్ని సాధారణ సమస్యలను ఎదుర్కొంటారు. ఈ విభాగంలో, మేము ఆ సమస్యలను చర్చిస్తాము మరియు క్రింది విధంగా సాధ్యమయ్యే పరిష్కారాలను సూచిస్తాము:
1: వేరియబుల్స్ ఉపయోగించడం లేదు
మేక్ఫైల్లో వేరియబుల్లను ఉపయోగించడం తప్పనిసరి, ఎందుకంటే కంపైలర్లు, టార్గెట్, సోర్స్ ఫైల్లు మొదలైనవాటిని సెట్ చేయడం అవసరం. మేక్ఫైల్లో ఏ వేరియబుల్ను ఉపయోగించకపోవడం అనేది ఎదుర్కొనే అత్యంత సాధారణ సమస్య. కాబట్టి, మునుపటి నమూనా మేక్ఫైల్లో CXX, CXXFLAGSc(కంపైలర్ ఫ్లాగ్లు), TARGET, SRCS మరియు OBJS వంటి ముఖ్యమైన వేరియబుల్లను ఉపయోగించాలని నిర్ధారించుకోండి.
2: సెపరేటర్ సమస్య లేదు
మేక్ఫైల్ను వ్రాస్తున్నప్పుడు, ఇండెంటేషన్ నియమాలను చాలా శ్రద్ధగా పరిగణించడం అవసరం, ఎందుకంటే ట్యాబ్లకు బదులుగా ఖాళీలను ఉపయోగించడం వలన 'మేక్' సూచన అమలు సమయంలో 'తప్పిపోయిన సెపరేటర్' సమస్యకు దారి తీస్తుంది. ఉదాహరణకు, మేము లైన్ 13 వద్ద నియమం ప్రారంభంలో ఖాళీని జోడించి, ట్యాబ్ను తీసివేస్తాము.
$ ( TARGET ) : $ ( OBJS )$ ( CXX ) $ ( CXXFLAGS ) -ఓ $ ( TARGET ) $ ( OBJS )
“మేక్” ప్రశ్నను అమలు చేసినప్పుడు, మేము లైన్ 13 వద్ద “తప్పిపోయిన సెపరేటర్” లోపాన్ని పొందుతాము మరియు ఫైల్ రన్ చేయడం ఆగిపోతుంది. ఈ సమస్యను నివారించడానికి, ఖాళీలకు బదులుగా “ట్యాబ్”ని ఉపయోగించాలని నిర్ధారించుకోండి.
తయారు
ఈ సమస్యను నివారించడానికి, కింది చిత్రంలో చూపిన విధంగా ఖాళీలకు బదులుగా “ట్యాబ్”ని ఉపయోగించాలని నిర్ధారించుకోండి:
$ ( TARGET ) : $ ( OBJS )$ ( CXX ) $ ( CXXFLAGS ) -ఓ $ ( TARGET ) $ ( OBJS )
3: “ఎంట్రీ పాయింట్ కనుగొనబడలేదు” సమస్య
ఈ లోపం ఎక్కువగా సోర్స్ ఫైల్ కారణంగా సంభవిస్తుంది మరియు మీరు సోర్స్ కోడ్ ఫైల్లోని “మెయిన్()” ఫంక్షన్ను ఉపయోగించకుండా పోయినప్పుడు వంటి మేక్ఫైల్ వల్ల కాదు. ఉదాహరణకు, మేము ప్రధాన() ఫంక్షన్ డెఫినిషన్ని సాధారణ వినియోగదారు నిర్వచించిన ఫంక్షన్ డిక్లరేషన్తో భర్తీ చేస్తాము.
#int షో ( ) {
చార్ v;
std::cout << 'విలువను నమోదు చేయండి:' ;
std::cin >> లో;
std::cout << లో << std::endl;
తిరిగి 0 ;
}
Windows యొక్క కమాండ్ ప్రాంప్ట్లో 'మేక్' సూచనను అమలు చేసిన తర్వాత, మేము 'WinMain'కి నిర్వచించబడని సూచన'ని ఎదుర్కొంటాము. ఎందుకంటే C++ ఫైల్ని అమలు చేయడం ప్రారంభించడానికి కంపైలర్కి ఎలాంటి ఎంట్రీ పాయింట్ కనిపించదు. దీన్ని పరిష్కరించడానికి, 'ప్రదర్శన'ని 'ప్రధాన'తో భర్తీ చేయండి.
4: సరికాని పొడిగింపుల ఉపయోగం
కొన్నిసార్లు, మేక్ఫైల్లో ఉపయోగించబడే సోర్స్ ఫైల్ కోసం వినియోగదారు అనుకోకుండా తప్పు పొడిగింపులను ఉపయోగించవచ్చు. తప్పు పొడిగింపును ఉపయోగించడం వలన రన్-టైమ్ ఎర్రర్లకు దారి తీస్తుంది, అనగా లక్ష్యాన్ని రూపొందించడానికి ఎటువంటి నియమం లేదు. మేము C++ ఫైల్ కోసం ఎక్జిక్యూటబుల్ మరియు ఆబ్జెక్ట్ ఫైల్ను రూపొందించడానికి మేక్ఫైల్ను సృష్టిస్తాము. ఏడవ లైన్లో, మేము సోర్స్ ఫైల్ను “c” పొడిగింపుతో అందిస్తాము.
CXX := g++CXXFLAGS := -ఎస్టీడీ =c++ పదకొండు - గోడ
TARGET = కొత్తది
SRCS = main.c
OBJS = $ ( SRCS:.cpp=.o )
అన్నీ: $ ( TARGET )
$ ( TARGET ) : $ ( OBJS )
'మేక్' సూచనను అమలు చేయడం వలన 'టార్గెట్ 'main.c' చేయడానికి ఎటువంటి నియమం లేదు'' లోపానికి దారి తీస్తుంది. ఈ సమస్యను నివారించడానికి, సరైన సోర్స్ ఫైల్ ఎక్స్టెన్షన్ని ఉపయోగించాలని నిర్ధారించుకోండి.
తయారు
5: తప్పిపోయిన డిపెండెన్సీలు
మేక్ఫైల్ను వ్రాస్తున్నప్పుడు, మీరు కోరుకున్న అవుట్పుట్ను పొందడానికి సోర్స్ ఫైల్ కోసం అన్ని డిపెండెన్సీలను చేర్చాలి. ఉదాహరణకు, మా C++ కోడ్ ఫైల్ “myheader.h” ఫైల్ని దాని డిపెండెన్సీగా ఉపయోగిస్తుంది. కాబట్టి, మేము దానిని C++ కోడ్ ఫైల్లో ఈ క్రింది విధంగా పేర్కొన్నాము:
##'myheader.h'ని చేర్చండి
int షో ( ) {
చార్ v;
std::cout << 'విలువను నమోదు చేయండి:' ;
std::cin >> లో;
std::cout << లో << std::endl;
తిరిగి 0 ;
}
మేక్ఫైల్లో, లైన్ 9 వద్ద వ్రాయబడిన బిల్డ్ రూల్లో “myheader.h” ఫైల్ని ఉపయోగించడాన్ని మేము ఉద్దేశపూర్వకంగా విస్మరిస్తాము.
% .O: % .cpp$ ( CXX ) $ ( CXXFLAGS ) -సి $ < -ఓ $ @
ఇప్పుడు, “మేక్” సూచనను ఉపయోగిస్తున్నప్పుడు, “‘అన్నీ’ కోసం ఏమీ చేయకూడదు”” లోపాన్ని ఎదుర్కొంటాము.
తయారు% .O: % .cpp myheader.h
$ ( CXX ) $ ( CXXFLAGS ) -సి $ < -ఓ $ @
పేర్కొన్న సమస్యను నివారించడానికి మరియు సోర్స్ కోడ్ను విజయవంతంగా అమలు చేయడానికి, కింది వాటిలో చిత్రీకరించిన విధంగా “myheader.h” ఫైల్ పేరును makefile తొమ్మిదవ పంక్తిలో పేర్కొనండి:
ముగింపు
ఈ గైడ్లో, వేరియబుల్స్, బిల్డ్ కమాండ్లు, రూల్స్ మొదలైన వాటికి అవసరమైన కంటెంట్లను ఉపయోగించి మేక్ఫైల్ యొక్క వాక్యనిర్మాణాన్ని మేము పూర్తిగా వివరించాము. వాక్యనిర్మాణాన్ని మరింత స్పష్టంగా వివరించడానికి కోడ్ ఉదాహరణ చేర్చబడింది. చివరికి, మేక్ఫైల్ను సృష్టించేటప్పుడు వినియోగదారు ఎదుర్కొనే కొన్ని సాధారణ సమస్యలు మరియు వాటి పరిష్కారాలను మేము చర్చించాము.