যদি এই প্রশ্নটি ফাইলটির একটি নমুনা Makefileআউটপুট সম্পর্কে হয় CMakeList.txtতবে দয়া করে চ্যাট করুন-ব্যাকএন্ড উত্সগুলি পরীক্ষা করুন এবং এরকম একটি তৈরি করুন Makefile। যদি তা না হয় তবে @ রবার্তো এর জবাবটিতে যুক্ত করে আমি বিশদটি গোপন করে এটি সহজ করার চেষ্টা করছি।
সিএমকে অনুষ্ঠান
যদিও 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।
(সিএমকে ফাংশন) বনাম বিধি তৈরি করুন
ইন পরিবর্তে ব্যবহার করা হয় । মত বৈশিষ্ট্য ছাড়াও , শৃঙ্খলা সরবরাহ। আমার নমনীয়তা নীচের মত দেখতে হবে,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বিস্তারিত উপলব্ধ 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ফাংশন ব্যবহার করে করতে পারি ।
target_include_directories(testapp PRIVATE "myincludes")
list(APPEND testapp_LIBRARIES
mytest mylibrarypath
)
target_link_libraries(testapp ${testapp_LIBRARIES})
বনাম যুক্তগুলি মেকের মধ্যে অন্তর্ভুক্ত এবং লাইব্রেরির পাথ
নিম্নলিখিতগুলির মতো লাইন যুক্ত করে আমরা অন্তর্ভুক্ত এবং লাইব্রেরি যুক্ত করতে পারি,
INCLUDES += -Imyincludes
LIBS += -Lmylibrarypath -lmytest
নোট করুন উপরের এই লাইনগুলি অটো-জেন সরঞ্জাম বা পিকেজি-কনফিগার থেকে উত্পন্ন করা যেতে পারে। (যদিও মেকফাইল স্বয়ং-কনফিগার সরঞ্জামগুলির উপর নির্ভরশীল নয়)
সিএমকে কনফিগার / টুইট করুন
সাধারণত ফাংশন ব্যবহার করে সরঞ্জামগুলির config.hমতো কিছু ফাইল উত্পন্ন করা সম্ভব । কাস্টম ফাংশন লেখার জন্য আরও কৌশল করা সম্ভব। এবং পরিশেষে আমরা নিম্নলিখিতগুলির মতো একটি কনফিগার নির্বাচন করতে পারি,auto-configconfigure_file
cmake --build . --config "Release"
optionফাংশনটি ব্যবহার করে কিছু কনফিগারযোগ্য বিকল্প যুক্ত করা সম্ভব ।
মেকফিল কনফিগার / টুইক করুন
যদি কোনওভাবে আমাদের কিছু ডিবাগ পতাকা দিয়ে সংকলন করা দরকার হয় তবে আমরা এই জাতীয় অনুরোধ করতে পারি make,
make CXXFLAGS=NDEBUG
আমি অভ্যন্তরীণ ভেরিয়েবলগুলি মনে করি Makefile-rulesএবং CMake-functionsতুলনা করার জন্য এটি ভাল সূচনা, আরও খননকারীর জন্য শুভকামনা।
cmakeএটিও চেয়েছিলাম। তবে আমি সন্দেহ করি আপনি এটি পাবেন কারণ ক্ষমতাগুলি কেবল সেইরকম একটির সাথে অন্যের কাছে মানচিত্র তৈরি করে না। আপনি যদি এ জাতীয়cmakeআচরণ করার চেষ্টা করেনmake, আপনি নিজেকে বাদাম চালিয়ে যাবেন, গুরুত্ব সহকারে। স্ক্র্যাচ থেকে শুরু করা সেরা। যে বিষয়গুলিতে তুচ্ছmakeতা বেশ জড়িত এবংcmakeতদ্বিপরীত।