gpt4 book ai didi

c++ - CMAKE-如何为单个文件设置不同的编译器选项

转载 作者:行者123 更新时间:2023-12-01 14:53:27 27 4
gpt4 key购买 nike

我有一个带有以下编译标志的CMAKE文件

 set (CMAKE_CXX_FLAGS_DEBUG  "${CMAKE_CXX_FLAGS_DEBUG} \
-fPIC -Wall -pedantic -Wextra -Werror \
-Wno-missing-braces -Wno-unused-variable \
-Wno-ignored-qualifiers -fdiagnostics-color")

我想为单个头文件省略-Wextra选项;/externals/include/foo.hpp(这是第三方 header 库,编译时会出现错误:[-Werror = unused-parameter])。

我已经尝试过 set_source_files_properties这样
set_source_files_properties(${EXTERNALS_SOURCE_DIR}/foo.hpp PROPERTIES COMPILE_FLAGS  "${CMAKE_CXX_FLAGS_DEBUG} -Wno-extra")

但无法摆脱编译错误。

有没有办法在CMAKE或在头文件本身中使用#pragmas?

谢谢。

解决方案
这是我摆脱错误的方法:
  • 创建文件foo_wrapper.hpp。
  • 添加_pragma忽略麻烦制造者编译标志
  • 在项目中的所有位置使用包装 header ,而不是实际的 header 。

  • `//在foo_wrapper.hpp文件中:
       _Pragma("GCC diagnostic push")

    _Pragma("GCC diagnostic ignored \"-Wunused-parameter\"")

    #include "foo.hpp"

    _Pragma("GCC diagnostic pop")

    `

    最佳答案

    在当前的编译器上,不可能通过构建选项来执行此操作。

    这是因为构建模型是如何工作的:编译器将为每个源文件调用一次,并且该源文件包含的所有头文件将始终使用与源文件本身相同的构建选项。
    因此,CMake将无法在这里为您提供帮助。

    一些编译器允许通过#pragma关闭某些警告。例如,MSVCgcc。检查您的编译器手册,以了解这方面的内容。不幸的是,这将永远是不可移植的,因此,如果您的代码库支持许多编译器,则#pragma可能会很长。我建议编写仅包含第三方 header 的包装 header ,这会给您带来麻烦,并解决所有警告禁用问题。然后,在您的项目中,您将始终包括包装器,而不是原始的第三方 header 。

    关于c++ - CMAKE-如何为单个文件设置不同的编译器选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60501390/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com