जिन लोगों को यहां से लाया गया था, उनके लिए मैं सीएमके जनरेटर की अभिव्यक्ति को कई लाइनों में कैसे विभाजित करूं?मैं कुछ नोट्स जोड़ना चाहूंगा।
लाइन निरंतरता विधि काम नहीं करेगी, CMake व्हॉट्सएप (इंडेंटेशन) और लाइन निरंतरता के साथ बनाई गई जनरेटर सूची को पार्स नहीं कर सकता है।
जबकि स्ट्रिंग (CONCAT) समाधान एक जनरेटर अभिव्यक्ति प्रदान करेगा जिसका मूल्यांकन किया जा सकता है, मूल्यांकन की गई अभिव्यक्ति को उद्धरण से घेर लिया जाएगा यदि परिणाम में कोई स्थान होता है।
प्रत्येक अलग-अलग विकल्प को जोड़ने के लिए एक अलग जनरेटर सूची का निर्माण किया जाना चाहिए, इसलिए मैंने जो निम्न में किया है, जैसे स्टैकिंग विकल्प निर्माण का कारण बनेंगे:
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})
यह उस प्रश्न से असंबंधित हो सकता है जिसका उत्तर मैं दे रहा हूं, दुर्भाग्यवश मैं जिस प्रश्न का उत्तर दे रहा हूं वह गलत तरीके से इस प्रश्न के डुप्लिकेट के रूप में चिह्नित है।
जेनरेटर सूचियों को संभाला नहीं जाता है और तार को उसी तरह से पार्स किया जाता है, और इस वजह से, एक अतिरिक्त सूची को कई लाइनों में एक जनरेटर सूची को विभाजित करने के लिए अतिरिक्त उपाय करने होंगे।