यदि यह प्रश्न फ़ाइल के एक नमूना 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 फ़ंक्शन) बनाम नियम बनाएं
में के बजाय इस्तेमाल कर रहे हैं । -इस तरह की सुविधा के अलावा , चेनिंग प्रदान करते हैं। मेरा न्यूनतर निम्न की तरह दिखेगा,Makefile
rules and recipes
functions
function
rules and recipes
Makefile
-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
विवरण प्रदान करता है। एक फाइल में परिभाषित विवरण रखने के लिए लिखना संभव है । उस तरह से मेकफाइल को कम किया जा सकता है जैसा मैंने पहले दिखाया था।recipe
how
executable.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-config
configure_file
cmake --build . --config "Release"
option
फ़ंक्शन का उपयोग करके कुछ कॉन्फ़िगर करने योग्य विकल्प जोड़ना संभव है ।
Makefile कॉन्फ़िगर / tweak
अगर किसी तरह हमें इसे कुछ डिबग ध्वज के साथ संकलित करने की आवश्यकता है, तो हम इस make
तरह से आह्वान कर सकते हैं,
make CXXFLAGS=NDEBUG
मुझे लगता है कि आंतरिक चर, Makefile-rules
और CMake-functions
तुलना के लिए अच्छी शुरुआत हैं, अधिक खुदाई के साथ अच्छी किस्मत।
cmake
भी यही चाहता था। लेकिन मुझे संदेह है कि आप इसे पा लेंगे क्योंकि क्षमताएं बस उस एक को अच्छी तरह से मैप नहीं करती हैं। यदि आप इसcmake
तरह का कार्य करने की कोशिश करते हैंmake
, तो आप अपने आप को गंभीर रूप से पागल कर देंगे। सबसे अच्छा सिर्फ खरोंच से शुरू करने के लिए। जो चीजें तुच्छ हैं,make
वे इसमें शामिल हैंcmake
, और इसके विपरीत।