Можно ли установить флаг `-fexceptions` для сборки yaml-cpp с использованием CMake - PullRequest
1 голос
/ 10 октября 2019

Я пытаюсь интегрировать libyaml-cpp в проект, который использует CMake. Я добавил yaml-cpp, используя add_subdirectory(yaml-cpp), в CMakefile. Однако мой проект использует следующий флаг -fno-exceptions для настроек компилятора gcc. Этот флаг выдает следующую ошибку при сборке yaml-cpp:

/yaml-cpp/include/yaml-cpp/node/impl.h:60:35: error: exception handling disabled, use -fexceptions to enable throw InvalidNode(m_invalidKey);

Итак, решение состоит в том, чтобы включить флаг -fexceptions. Но я хочу включить это только для yaml-cpp сборки, а не для остальной части проекта.

Я новичок в Cmake и yaml-cpp. Есть ли способ установить этот флаг -fexceptions в Cmakefile (для yaml-cpp), чтобы сборка прошла .?

1 Ответ

1 голос
/ 10 октября 2019

Если вы используете код yaml-cpp в репозитории GitHub здесь и предполагаете, что вы работаете в системе Unix, опции (флаги) компиляции для цели yaml-cpp применяются вCMake файл здесь , при вызове target_compile_options(). Просто добавьте флаг -fexceptions к этому вызову, для случая not-msvc:

yaml-cpp / CMakeLists.txt :

...
target_compile_options(yaml-cpp
  PRIVATE
    # Add -fexceptions to this line.
    $<${not-msvc}:-Wall -Wextra -Wshadow -Weffc++ -Wno-long-long -fexceptions>
    $<${not-msvc}:-pedantic -pedantic-errors>

    $<$<AND:${backport-msvc-runtime},${msvc-rt-mtd-static}>:-MTd>
    $<$<AND:${backport-msvc-runtime},${msvc-rt-mt-static}>:-MT>
    $<$<AND:${backport-msvc-runtime},${msvc-rt-mtd-dll}>:-MDd>
    $<$<AND:${backport-msvc-runtime},${msvc-rt-mt-dll}>:-MD>

    # /wd4127 = disable warning C4127 "conditional expression is constant"
    # http://msdn.microsoft.com/en-us/library/6t66728h.aspx
    # /wd4355 = disable warning C4355 "'this' : used in base member initializer list
    # http://msdn.microsoft.com/en-us/library/3c594ae3.aspx
    $<$<CXX_COMPILER_ID:MSVC>:/W3 /wd4127 /wd4355>)
...