উপরের আপনার প্রচেষ্টাটি আপনার প্রত্যাশার মতো মনে হচ্ছে ওভাররাইটিংয়ের পরিবর্তে আপনার ফাইল / লক্ষ্যতে আরও পতাকা যুক্ত করছে। উদাহরণস্বরূপ, উত্স ফাইলগুলিতে সম্পত্তিগুলির ডক্স থেকে - COMPILE_FLAGS :
এই উত্স ফাইলটি তৈরি করার সময় এই পতাকাগুলি সংকলিত পতাকাগুলির তালিকায় যুক্ত করা হবে।
আপনার -Weffc++দ্বারা foo.cpp এর জন্য পতাকাটি পাল্টাতে সক্ষম হওয়া উচিত
set_source_files_properties(foo.cpp PROPERTIES COMPILE_FLAGS -Wno-effc++)
এটির সংকলক কমান্ডের -Wno-effc++পরে যুক্ত করার প্রভাব থাকতে হবে -Weffc++এবং পরবর্তী সেটিংসটি জিতেছে। সম্পূর্ণ কমান্ডটি দেখতে এবং এটি সত্যিই কেসটি পরীক্ষা করে দেখুন, আপনি এটি করতে পারেন
make VERBOSE=1
একটি সরাইয়া হিসাবে, গনুহ সি ++ স্ট্যান্ডার্ড লাইব্রেরির রক্ষণাবেক্ষণকারীকে এক একটি প্রশংসনীয় নেতিবাচক মতামত প্রদর্শন করে -Weffc++এ এই উত্তর ।
আরেকটি বিষয় হ'ল add_definitionsআপনি এই অর্থে অপব্যবহার করছেন যে আপনি এটি উদ্দেশ্যে করা প্রিপ্রসেসর সংজ্ঞাগুলির চেয়ে সংকলক পতাকার জন্য ব্যবহার করছেন।
এটি ব্যবহার করা ভাল add_compile_options
add_compile_options(-Wall -Weffc++ -pedantic -std=c++0x)
বা সিএমকে সংস্করণ <3.0 এর মতো আরও কিছু করার জন্য:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Weffc++ -pedantic -std=c++0x")
নীচের মন্তব্যে আরও প্রশ্নের জবাবে, আমি বিশ্বাস করি যে একটি একক ফাইলে বিশ্বস্তভাবে পতাকা মুছে ফেলা অসম্ভব । কারণটি হ'ল যে কোনও প্রদত্ত উত্স ফাইলের জন্য, এটিতে তার টার্গেটের 1COMPILE_OPTIONS এবং 1 প্রয়োগ করা হয়েছে, তবে এগুলি সেই উত্স ফাইলের জন্য কোনও বৈশিষ্ট্যে প্রদর্শিত হয় না।COMPILE_FLAGS
আপনি লক্ষ্যটির থেকে সমস্যার পতাকাটি সরিয়ে ফেলার দিকে লক্ষ্য COMPILE_OPTIONSরাখতে পারেন, তারপরে এটি প্রয়োজনীয় প্রতিটি নির্দিষ্ট উত্স ফাইল থেকে বাদ দিয়ে লক্ষ্যের প্রতিটি উত্সে স্বতন্ত্রভাবে প্রয়োগ করতে পারেন।
তবে এটি যখন অনেক পরিস্থিতিতে কাজ করতে পারে তবে এতে বেশ কয়েকটি সমস্যা রয়েছে।
প্রথম - উত্স ফাইলগুলির বৈশিষ্ট্যগুলিCOMPILE_OPTIONS কেবলমাত্র অন্তর্ভুক্ত নয় COMPILE_FLAGS। এটি একটি সমস্যা কারণ COMPILE_OPTIONSলক্ষ্যটির মধ্যে জেনারেটর এক্সপ্রেশন অন্তর্ভুক্ত থাকতে পারে তবে COMPILE_FLAGSসেগুলি সমর্থন করে না। সুতরাং আপনার পতাকাটি অনুসন্ধান করার সময় আপনাকে জেনারেটর এক্সপ্রেশনগুলি সামঞ্জস্য করতে হবে এবং আপনার পতাকাটি যদি একটি বা একাধিকতে অন্তর্ভুক্ত থাকে তবে এটি অন্য অংশে পুনরায় প্রয়োগ করা উচিত কিনা তা দেখার জন্য আপনাকে জেনারেটর এক্সপ্রেশনগুলি সংশ্লেষ করতে হবে সোর্স ফাইল.
দ্বিতীয় - সিএমকে ভি ৩.০ থেকে লক্ষ্যগুলি নির্দিষ্ট করতে পারে INTERFACE_COMPILE_OPTIONS। এর অর্থ হ'ল আপনার টার্গেটের নির্ভরতা আপনার টার্গেটকে এর COMPILE_OPTIONSমাধ্যমে যুক্ত করতে বা ওভাররাইড করতে পারে INTERFACE_COMPILE_OPTIONS। সুতরাং আপনাকে আরও লক্ষ্যবস্তুর সমস্ত নির্ভরতার মধ্য দিয়ে পুনরাবৃত্তি করতে হবে (লক্ষ্যটির তালিকায় LINK_LIBRARIESজেনারেটর এক্সপ্রেশনও থাকতে পারে বলে একটি বিশেষ সহজ কাজ নয় ) যা সমস্যার পতাকাটি প্রয়োগ করছে এটি আবিষ্কার করতে এবং সেগুলি থেকে এটিকে সরিয়ে চেষ্টা করে দেখতে হবে লক্ষ্য ' INTERFACE_COMPILE_OPTIONSখুব।
জটিলতার এই পর্যায়ে, আমি উত্স ফাইল থেকে নিঃশর্তভাবে একটি নির্দিষ্ট পতাকা সরিয়ে ফাংশনটি সরবরাহ করতে সিএমকে একটি প্যাচ জমা দিতে চাই।
1: নোট করুন যে COMPILE_FLAGSউত্স ফাইলগুলিতে থাকা সম্পত্তির বিপরীতে , COMPILE_FLAGSলক্ষ্যগুলিতে সম্পত্তি হ্রাস করা হয়।