যারা এখানে থেকে আনা হয়েছিল তাদের জন্য আমি কীভাবে সিএমকে জেনারেটর এক্সপ্রেশনটিকে একাধিক লাইনে বিভক্ত করব? আমি কিছু নোট যুক্ত করতে চাই
লাইন ধারাবাহিকতা পদ্ধতিটি কাজ করবে না, সিএমকে হোয়াইটস্পেস (ইন্ডেন্টেশন) এবং লাইন ধারাবাহিকতায় তৈরি জেনারেটরের তালিকাকে পার্স করতে পারে না।
স্ট্রিং (কনক্যাট) সমাধান এমন একটি জেনারেটর এক্সপ্রেশন প্রদান করবে যা মূল্যায়ন করা যেতে পারে, যখন ফলাফলটিতে কোনও স্থান থাকে তবে মূল্যায়িত প্রকাশটি উদ্ধৃতি দ্বারা ঘিরে থাকবে।
প্রতিটি স্বতন্ত্র বিকল্প যুক্ত করার জন্য একটি পৃথক জেনারেটর তালিকা তৈরি করতে হবে, সুতরাং নীচের মতো করে করা স্ট্যাকিং বিকল্পগুলি বিল্ডটি ব্যর্থ করে দেবে:
string(CONCAT WARNING_OPTIONS "$<"
"$<OR:"
"$<CXX_COMPILER_ID:MSVC>,"
"$<STREQUAL:${CMAKE_CXX_SIMULATE_ID},MSVC>"
">:"
"/D_CRT_SECURE_NO_WARNINGS "
">$<"
"$<AND:"
"$<CXX_COMPILER_ID:Clang,GNU>,"
"$<NOT:$<STREQUAL:${CMAKE_CXX_SIMULATE_ID},MSVC>>"
">:"
"-Wall -Werror "
">$<"
"$<CXX_COMPILER_ID:GNU>:"
"-Wno-multichar -Wno-sign-compare "
">")
add_compile_options(${WARNING_OPTIONS})
এর কারণ, ফলাফলগুলি বিকল্পগুলিকে উদ্ধৃতিগুলিতে সংকলককে দেওয়া হয়
/usr/lib64/ccache/c++ -DGTEST_CREATE_SHARED_LIBRARY=1 -Dgtest_EXPORTS -I../ThirdParty/googletest/googletest/include -I../ThirdParty/googletest/googletest -std=c++11 -fno-rtti -fno-exceptions -fPIC -std=c++11 -fno-rtti -fno-exceptions -Wall -Wshadow -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers "-Wall -Werror -Wno-multichar -Wno-sign-compare " -fdiagnostics-color -MD -MT ThirdParty/googletest/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o -MF ThirdParty/googletest/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o.d -o ThirdParty/googletest/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o -c ../ThirdParty/googletest/googletest/src/gtest-all.cc
c++: error: unrecognized command line option ‘-Wall -Werror -Wno-multichar -Wno-sign-compare ’
স্ট্রিং (CONCAT) সমাধান ব্যবহার করে প্রতিনিধিত্ব করা দীর্ঘ জেনারেটর এক্সপ্রেশন মূল্যায়নের জন্য, প্রতিটি জেনারেটর এক্সপ্রেশনকে কোনও ফাঁকা জায়গা ছাড়াই একক বিকল্পে মূল্যায়ন করতে হবে:
string(CONCAT WALL "$<"
"$<AND:"
"$<CXX_COMPILER_ID:Clang,GNU>,"
"$<NOT:$<STREQUAL:${CMAKE_CXX_SIMULATE_ID},MSVC>>"
">:"
"-Wall"
">")
string(CONCAT WERROR "$<"
"$<AND:"
"$<CXX_COMPILER_ID:Clang,GNU>,"
"$<NOT:$<STREQUAL:${CMAKE_CXX_SIMULATE_ID},MSVC>>"
">:"
"-Werror"
">")
message(STATUS "Warning Options: " ${WALL} ${WERROR})
add_compile_options(${WALL} ${WERROR})
এটি যে প্রশ্নের উত্তর আমি পোস্ট করছি তার সাথে এটি সম্পর্কিত নয়, দুর্ভাগ্যক্রমে আমি যে প্রশ্নের উত্তর দিচ্ছি তা এই প্রশ্নের সদৃশ হিসাবে ভুলভাবে চিহ্নিত হয়েছে।
জেনারেটর তালিকাগুলি স্ট্রিংগুলির মতো হ্যান্ডল করা এবং পার্স করা হয় না এবং এর কারণে, একাধিক লাইনে জেনারেটরের তালিকাকে বিভক্ত করার জন্য অতিরিক্ত ব্যবস্থা গ্রহণ করতে হবে।