gpt4 book ai didi

c++ - 如何在 CMake 中为 Visual Studio 生成器添加预编译头文件

转载 作者:行者123 更新时间:2023-12-02 10:01:03 43 4
gpt4 key购买 nike

CMake 3.18;对比 2019;
我正在学习 CMake 并检查我的结果,我正在尝试生成 Visual Studio 项目。
我当前的问题是预编译头选项。
我想要实现的是 VS 项目将具有正确文件名的“/use”或“/create”预编译头选项。
在我的项目文件夹中,我已经有 ugpch.h 和 ugpch.cpp 文件,它们代表预编译的头文件。
我试过使用target_precompile_headers(UGame PRIVATE Source/ugpch.h)我的 cmakelists 中的指令,但这对我的 Visual Studio 预编译头选项没有影响。
这样做的正确方法是什么?
编辑 :我已经将我的 cmake 更新到 3.18 版本,但在我生成的 Visual Studio 项目中仍然没有我预期的效果。
相反,我找到了带有 cmake_pch.cxx 文件的新文件夹“预编译头文件”。它看起来像 target_precompile_headers做了与我预期完全不同的事情

最佳答案

命令target_precompile_headers已在 CMake 3.16 中添加。
你要么必须升级你的 CMake 发行版(VS2019 中的发行版是最新的),要么从安装程序中安装最新的。
否则,您将不得不使用 cotire 作为预编译头文件,但我的建议是升级,因为它通常很容易做到,而且您的计算机上可能已经有了 Visual Studio 附带的最新版本。

既然你更新了你的问题。
命令target_precompile_headers没有按照你的想法去做。你不在那里提供你的 PCH,你提供什么标题应该是生成的 PCH 的一部分。如果文件 ugpch.h包含 headera.h 的内容, headerb.hheaderc.h ,那么你的预编译头命令应该是这样的:

target_precompile_headers(UGame PRIVATE headera.h headerb.h headerc.h)
实际的预编译头文件将由 CMake 生成。
当然,你仍然可以使用 ugpch.h作为您的预编译头文件。 CMake 将简单地使用它来生成自己的。正如你所观察到的。
之后,删除标题的手动包含。它将自动包含在内。
从 CMake 文档中:

The list of header files is used to generate a header file named cmake_pch.h|xx which is used to generate the precompiled header file (.pch, .gch, .pchi) artifact. The cmake_pch.h|xx header file will be force included (-include for GCC, /FI for MSVC) to all source files, so sources do not need to have #include "pch.h".


为什么它会像你问的那样工作? CMake 支持 PUBLIC预编译的头文件。如果您链接到多个目标,每个目标都具有公共(public)预编译 header ,那么您的目标将继承所有这些 header 。由于编译器通常接受一个预编译的 header ,因此 CMake 必须生成聚集的 header 才能使其正常工作。

关于c++ - 如何在 CMake 中为 Visual Studio 生成器添加预编译头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62541168/

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