Buradan buraya getirilenler için Bir CMake jeneratör ifadesini birden çok satıra nasıl bölerim? Bazı notlar eklemek istiyorum.
Satır devam yöntemi çalışmaz, CMake boşluk (girinti) ve satır devamı ile yapılmış bir oluşturucu listesini ayrıştıramaz.
Dize (CONCAT) çözümü değerlendirilebilecek bir üretici ifadesi sağlarken, sonuç bir boşluk içeriyorsa değerlendirilen ifade tırnak içine alınacaktır.
Eklenecek her bir seçenek için ayrı bir jeneratör listesi oluşturulmalıdır, bu nedenle aşağıda yaptığım gibi istifleme seçenekleri yapının başarısız olmasına neden olacaktır:
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})
Bunun nedeni, sonuçtaki seçeneklerin derleyiciye tırnak içinde iletilmesidir.
/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 ’
Dize (CONCAT) çözümü kullanılarak temsil edilen uzun oluşturucu ifadelerini değerlendirmek için, her bir oluşturucu ifadesi boşluk içermeyen tek bir seçenek olarak değerlendirilmelidir:
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})
Bu, yanıtını yayınladığım soruyla ilgisiz olabilir, maalesef yanıtladığım soru yanlış bir şekilde bu sorunun kopyası olarak işaretlendi.
Jeneratör listeleri dizgilerle aynı şekilde ele alınmaz ve ayrıştırılmaz ve bu nedenle, bir jeneratör listesini birden çok satıra bölmek için alınması gereken ek önlemler vardır.