【问题标题】:disable precompiled header for a single file禁用单个文件的预编译头
【发布时间】:2017-04-14 16:19:32
【问题描述】:

我正在处理一个在vs2013 上有许多.cpp 文件的项目,并为它们使用预编译头文件。我正在使用 CMake 构建我的项目。

但是我有一个.c 文件(我们称之为xyz.c),我想禁用它的预编译头。

我尝试了几种方法,但如果我为所有.cpp 文件启用预编译头文件,它也会自动为.c 文件打开。这是我尝试过的:

set_source_files_properties (xyz.c
  PROPERTIES COMPILE_FLAGS /Y-xyz.c )

假设所有文件都启用了/Yu,我只是尝试为xyz.c关闭此选项。

如果有人知道任何方法,请告诉我。

【问题讨论】:

    标签: c++ c visual-c++ cmake


    【解决方案1】:

    从 cmake 3.16 开始设置 /Y- 编译器选项将不起作用。为单个文件禁用预编译头的正确方法如下:

    set_source_files_properties(non-pch.cpp PROPERTIES SKIP_PRECOMPILE_HEADERS ON)
    

    文档: https://cmake.org/cmake/help/v3.16/prop_sf/SKIP_PRECOMPILE_HEADERS.html

    (反正没那么有用)

    【讨论】:

      【解决方案2】:

      /Y- 不接受参数。试试:

      set_source_files_properties(xyz.c
        PROPERTIES COMPILE_FLAGS /Y-)
      

      或者,您可以使用相反的方法,仅对.cpp 文件使用/Yu,而不是对所有文件使用/Yu 并仅对您的.c 文件禁用它。鉴于您的 .cpp 文件列在变量 SOURCES 中,而 my_pch.h 是您的预编译标头:

      set_source_files_properties(${SOURCES}
        PROPERTIES COMPILE_FLAGS /Yumy_pch.h)
      

      【讨论】:

      • 感谢您的回复.. 但还是不行
      • 你在重新配置之前清理过你的构建目录了吗?我用替代方法编辑了我的答案。如果它也不起作用,请使用完整的 CMake 代码编辑您的问题
      • 再次感谢您的回复。这很有帮助,我稍后会尝试另一种方法。有其他问题。再次感谢。
      • 我尝试了另一种方法,它有效。首先,我启用对所有文件使用预编译头,然后使用另一个命令 /Y- ,将其禁用到特定文件。再次感谢,
      猜你喜欢
      • 1970-01-01
      • 2017-03-09
      • 2010-11-20
      • 2012-07-09
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多