【问题标题】:Is it possible to set `-fexceptions` flag for building yaml-cpp using CMake是否可以为使用 CMake 构建 yaml-cpp 设置“-fexceptions”标志
【发布时间】:2019-10-10 13:07:41
【问题描述】:

我正在尝试将 libyaml-cpp 集成到使用 CMake 的项目中。我使用 add_subdirectory(yaml-cpp) 将 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 构建而不是项目的其余部分启用此功能。

我是Cmakeyaml-cpp 的新手。有没有办法在 Cmakefile 中设置这个标志-fexceptions(对于yaml-cpp),以便构建通过。?

【问题讨论】:

    标签: cmake yaml-cpp


    【解决方案1】:

    假设您正在使用 GitHub 存储库 here 中的 yaml-cpp 代码,并且假设您在 Unix 系统上构建,则 yaml-cpp 目标的编译选项(标志)将应用于 CMake 文件 @987654322 @,在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>)
    

    【讨论】:

      猜你喜欢
      • 2013-02-21
      • 1970-01-01
      • 2013-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多