สำหรับผู้ที่ถูกนำมาที่นี่จากฉันจะแยกนิพจน์ตัวสร้าง CMake เป็นหลายบรรทัดได้อย่างไรฉันต้องการเพิ่มบันทึกบางอย่าง
วิธีการต่อเนื่องของบรรทัดจะไม่ทำงาน 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})
คำถามนี้อาจไม่เกี่ยวข้องกับคำถามที่ฉันกำลังโพสต์คำตอบ แต่น่าเสียดายที่คำถามที่ฉันกำลังตอบถูกทำเครื่องหมายว่าซ้ำกับคำถามนี้อย่างไม่ถูกต้อง
รายการตัวสร้างจะไม่ได้รับการจัดการและแยกวิเคราะห์ในลักษณะเดียวกับสตริงและด้วยเหตุนี้จึงมีมาตรการเพิ่มเติมที่เราต้องดำเนินการเพื่อแยกรายการตัวสร้างเป็นหลายบรรทัด