여기에서 가져온 사람들을 위해 위해 CMake 생성기 표현식을 여러 줄로 어떻게 분할합니까? 몇 가지 메모를 추가하고 싶습니다.
줄 연속 방법은 작동하지 않으며 CMake는 공백 (들여 쓰기) 및 줄 연속으로 만든 생성기 목록을 구문 분석 할 수 없습니다.
string (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 ’
string (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})
이것은 제가 답변을 게시하는 질문과 관련이 없을 수 있습니다. 불행히도 제가 답변하는 질문이이 질문의 중복으로 잘못 표시되어 있습니다.
생성자 목록은 문자열과 같은 방식으로 처리 및 구문 분석되지 않으며, 이로 인해 생성자 목록을 여러 줄로 분할하기 위해 취해야하는 추가 조치가 있습니다.