যদি এই প্রশ্নটি ফাইলটির একটি নমুনা 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
।
(সিএমকে ফাংশন) বনাম বিধি তৈরি করুন
ইন পরিবর্তে ব্যবহার করা হয় । মত বৈশিষ্ট্য ছাড়াও , শৃঙ্খলা সরবরাহ। আমার নমনীয়তা নীচের মত দেখতে হবে,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
ফাংশন ব্যবহার করে করতে পারি ।
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-config
configure_file
cmake --build . --config "Release"
option
ফাংশনটি ব্যবহার করে কিছু কনফিগারযোগ্য বিকল্প যুক্ত করা সম্ভব ।
মেকফিল কনফিগার / টুইক করুন
যদি কোনওভাবে আমাদের কিছু ডিবাগ পতাকা দিয়ে সংকলন করা দরকার হয় তবে আমরা এই জাতীয় অনুরোধ করতে পারি make
,
make CXXFLAGS=NDEBUG
আমি অভ্যন্তরীণ ভেরিয়েবলগুলি মনে করি Makefile-rules
এবং CMake-functions
তুলনা করার জন্য এটি ভাল সূচনা, আরও খননকারীর জন্য শুভকামনা।
cmake
এটিও চেয়েছিলাম। তবে আমি সন্দেহ করি আপনি এটি পাবেন কারণ ক্ষমতাগুলি কেবল সেইরকম একটির সাথে অন্যের কাছে মানচিত্র তৈরি করে না। আপনি যদি এ জাতীয়cmake
আচরণ করার চেষ্টা করেনmake
, আপনি নিজেকে বাদাম চালিয়ে যাবেন, গুরুত্ব সহকারে। স্ক্র্যাচ থেকে শুরু করা সেরা। যে বিষয়গুলিতে তুচ্ছmake
তা বেশ জড়িত এবংcmake
তদ্বিপরীত।