यदि यह प्रश्न फ़ाइल के एक नमूना Makefileआउटपुट के बारे में है, CMakeList.txtतो कृपया cmake-backend स्रोतों की जाँच करें और एक ऐसा जेनरेट करें Makefile। यदि यह नहीं है तो @Roberto के उत्तर को जोड़कर विवरण को छिपाकर इसे सरल बनाने का प्रयास कर रहा हूं।
सीएमके समारोह
जबकि Makeनियम और नुस्खा के लिए लचीला उपकरण है, CMakeअमूर्त की एक परत है जो कॉन्फ़िगरेशन सुविधा को भी जोड़ता है।
मेरा मैदान CMakeLists.txtनिम्नलिखित की तरह दिखेगा,
cmake_minimum_required(VERSION 2.8)
project(example)
file(GLOB testapp_SOURCES *.cc)
add_executable(testapp ${testapp_SOURCES})
ध्यान दें, कि निर्माण CMakeछुपाता howहै किया जा सकता है। हम केवल निर्दिष्ट whatइनपुट और आउटपुट है।
CMakeLists.txtसमारोह कॉल कि द्वारा परिभाषित कर रहे की सूची होती है cmake।
(CMake फ़ंक्शन) बनाम नियम बनाएं
में के बजाय इस्तेमाल कर रहे हैं । -इस तरह की सुविधा के अलावा , चेनिंग प्रदान करते हैं। मेरा न्यूनतर निम्न की तरह दिखेगा,Makefilerules and recipesfunctionsfunctionrules and recipesMakefile
-include "executable.mk"
TARGETS=testapp.bin
all:${TARGETS}
जबकि executable.mkनिम्नलिखित की तरह दिखेगा,
SOURCES=$(wildcard *.cpp)
OBJECTS=$(SOURCES:.cpp=.o)
DEPS=$(SOURCES:.cpp=.d)
%.bin:$(OBJECTS)
$(CC) $(CFLAGS) -o $@ $^ $(LFLAGS) $(LIBS)
.PHONY: all clean
clean:
$(RM) $(OBJECTS) $(DEPS) $(TARGETS)
-include $(DEPS)
स्क्रैच से शुरू मैं Makefileनिम्नलिखित की तरह शुरू होगा ,
all: testapp.bin
testapp.bin:sourcea.o sourcb.o
$(CC) $(CFLAGS) -o $@ $^ $(LFLAGS) $(LIBS)
.PHONY: all clean
clean:
$(RM) $(OBJECTS) testapp.bin
मुझे यह स्निपेट यहीं से मिली और इसे संशोधित किया। ध्यान दें कि इस फ़ाइल में कुछ निहित-नियम जोड़े गए हैं जो मेकफाइल-प्रलेखन में पाए जा सकते हैं। कुछ निहित चर भी यहां प्रासंगिक हैं।
ध्यान दें, कि निर्माण को दिखाते हुए Makefileविवरण प्रदान करता है। एक फाइल में परिभाषित विवरण रखने के लिए लिखना संभव है । उस तरह से मेकफाइल को कम किया जा सकता है जैसा मैंने पहले दिखाया था।recipehowexecutable.mk
में आंतरिक चर CMakeऔरMake
अब थोड़ा उन्नत हो रहा है, CMakeहम निम्नलिखित की तरह एक संकलक ध्वज सेट कर सकते हैं,
set(CMAKE_C_FLAGS "-Wall")
कृपया फ़ाइल में CMakeडिफ़ॉल्ट चर के बारे में अधिक जानकारी प्राप्त करें CMakeCache.txt। CMakeउपरोक्त कोड के बराबर होगी Makeनीचे कोड,
CFLAGS = -Wall
ध्यान दें कि CFLAGSएक आंतरिक चर है Make, उसी तरह, CMAKE_C_FLAGSआंतरिक चर हैCMake ।
जोड़ना और CMake में पुस्तकालय पथ
हम इसे cmakeकार्यों का उपयोग करने में कर सकते हैं ।
target_include_directories(testapp PRIVATE "myincludes")
list(APPEND testapp_LIBRARIES
mytest mylibrarypath
)
target_link_libraries(testapp ${testapp_LIBRARIES})
बनाम मेक शामिल हैं और मेक में लाइब्रेरी पथ
हम निम्नलिखित की तरह लाइनों को जोड़कर और पुस्तकालयों को जोड़ सकते हैं,
INCLUDES += -Imyincludes
LIBS += -Lmylibrarypath -lmytest
ध्यान दें कि ऊपर दी गई लाइनें ऑटो-जीन टूल या pkg-config से उत्पन्न हो सकती हैं। (हालांकि मेकफाइल ऑटो-कॉन्फिगर टूल्स के लिए निर्भर नहीं है)
CMake कॉन्फिगर / tweek
आम तौर पर फ़ंक्शन का उपयोग करके टूल की config.hतरह कुछ फ़ाइल उत्पन्न करना संभव है । कस्टम फ़ंक्शन लिखना अधिक ट्रिक करना संभव है। और अंत में हम निम्नलिखित की तरह एक विन्यास का चयन कर सकते हैं,auto-configconfigure_file
cmake --build . --config "Release"
optionफ़ंक्शन का उपयोग करके कुछ कॉन्फ़िगर करने योग्य विकल्प जोड़ना संभव है ।
Makefile कॉन्फ़िगर / tweak
अगर किसी तरह हमें इसे कुछ डिबग ध्वज के साथ संकलित करने की आवश्यकता है, तो हम इस makeतरह से आह्वान कर सकते हैं,
make CXXFLAGS=NDEBUG
मुझे लगता है कि आंतरिक चर, Makefile-rulesऔर CMake-functionsतुलना के लिए अच्छी शुरुआत हैं, अधिक खुदाई के साथ अच्छी किस्मत।
cmakeभी यही चाहता था। लेकिन मुझे संदेह है कि आप इसे पा लेंगे क्योंकि क्षमताएं बस उस एक को अच्छी तरह से मैप नहीं करती हैं। यदि आप इसcmakeतरह का कार्य करने की कोशिश करते हैंmake, तो आप अपने आप को गंभीर रूप से पागल कर देंगे। सबसे अच्छा सिर्फ खरोंच से शुरू करने के लिए। जो चीजें तुच्छ हैं,makeवे इसमें शामिल हैंcmake, और इसके विपरीत।