স্বয়ংক্রিয়তা নির্ভরতা প্রচারের মতো আধুনিক বৈশিষ্ট্যগুলি ব্যবহার করার জন্য আমি কোনও উত্তরাধিকার সিএমকে সেটআপ পুনরায় লেখার প্রক্রিয়াধীন। (যেমন target_include_directories(<target> PUBLIC <dir>)পরিবর্তে জিনিস ব্যবহার করে include_directories(<dir>)।) বর্তমানে, আমরা বিশ্বব্যাপী ডিরেক্টরি বৈশিষ্ট্যগুলির গুচ্ছ সেট করে সমস্ত প্রকল্প নির্ভরতা তথ্য ম্যানুয়ালি পরিচালনা করি।
আমার পরীক্ষায় আমি কয়েকটি উদাহরণ পেয়েছি যেখানে নতুন বিল্ডের একটি লক্ষ্য একটি লাইব্রেরির সাথে লিঙ্ক করবে যা পুরানো বিল্ডটি নয়। আমি এটির সাথে সুস্পষ্টভাবে লিঙ্ক দিচ্ছি না, সুতরাং আমি জানি যে এটি লক্ষ্যটির নির্ভরতা থেকে আসছে, তবে CMakeLists.txtআমি খুঁজে না পাওয়া অবধি নির্ভরতা স্তরক্রম অনুসরণ করে কোনটি (গুলি) প্রজেক্টের সমস্তটি পুনরুক্তভাবে দেখতে হবে তা আবিষ্কার করার জন্য to এক যে প্রশ্নে লাইব্রেরি টান। আমাদের কয়েক ডজন গ্রন্থাগার রয়েছে সুতরাং এটি তুচ্ছ প্রক্রিয়া নয়।
সিএমকে কি প্রতিটি লক্ষ্যের জন্য দেখার কোনও উপায় সরবরাহ করে, এর কোন নির্ভরতা সুস্পষ্টভাবে যুক্ত হয়েছিল এবং কোনটি ট্রানজিটিভ নির্ভরতার মাধ্যমে প্রচারিত হয়েছিল?
দেখে মনে হচ্ছে --graphvizআউটপুট করে এই পার্থক্য দেন, তাই পরিষ্কারভাবে CMake অভ্যন্তরীণভাবে প্রসঙ্গ জানেন। তবে, আমি treeকমান্ড লাইনে নির্ভরতা সম্পর্কিত তথ্য প্রদর্শন করতে একটি অনুরূপ স্ক্রিপ্ট লিখতে চাইছি এবং গ্রাফভিজ ফাইলগুলি পার্স করে যাচ্ছি যা দুঃস্বপ্ন এবং হ্যাক উভয়ের মতোই লাগে।
আমি যতদূর বলতে পারি, এই তথ্যটি অন্তর্ভুক্ত cmake-file-apiকরে না । আমি ভেবেছিলাম codemodel/target/dependenciesক্ষেত্রটি কাজ করতে পারে তবে এটি স্থানীয় এবং ট্রানজিটিভ নির্ভরতা উভয়কেই মিশ্রিত করে। এবং backtraceপ্রতিটি নির্ভরতার ক্ষেত্রটি কেবল বর্তমান টার্গেটের জন্য add_executable/ add_libraryকলটির সাথে ফিরে আসে ।
--graphizবিকল্প আপনার প্রশ্নের উত্তর দেয় না ? কেন ডট ফাইলগুলি পার্সিং করা দুঃস্বপ্নের মতো মনে হয়? ডট ফাইলগুলি মানব-পঠনযোগ্য সংযুক্ত পয়েন্টগুলি উপস্থাপনের সহজতম, সাধারণ এবং নমনীয় উপায়। সঙ্গেgvprউপযোগ আপনি awk পর শৈলী তাদের সাথে কিছু করতে পারেন, এবং আপনি তাদের অন্যান্য ভাষায় আমদানি করতে পারেন। কেন ডট ফাইল, যা আক্ষরিক অর্থে লক্ষ্যগুলির মধ্যে গাছের মতো নির্ভরতার কাঠামোর প্রতিনিধিত্ব করে, আপনি যা চান তা "দেখার উপায়" নয়?