[英]How to add precompiled headers in CMake for visual studio generator
CMake 3.18; 对比 2019;
我正在学习 CMake 并检查我的结果,我正在尝试生成 Visual Studio 项目。 我当前的问题是预编译的 header 选项。 我想要实现的是 VS 项目将具有正确文件名的“/use”或“/create”预编译头选项。
在我的项目文件夹中,我已经有 ugpch.h 和 ugpch.cpp 文件,它们代表预编译的头文件。 我已经尝试在我的 cmakelists 中使用target_precompile_headers(UGame PRIVATE Source/ugpch.h)
指令,但这对我的 Visual Studio 预编译 header 选项没有影响。 这样做的正确方法是什么?
编辑:我已经将我的 cmake 更新到 3.18 版本,但在我生成的 Visual Studio 项目中仍然没有我预期的效果。 相反,我发现带有 cmake_pch.cxx 文件的新文件夹“预编译 header 文件”。看起来target_precompile_headers
做了一些与我预期完全不同的事情
在 CMake 3.16 中添加了命令target_precompile_headers
。
您要么必须升级 CMake 发行版(VS2019 中随附的发行版是最新的),要么从安装程序中安装最新版本。
否则,您将不得不使用 cotire 来预编译 header,但我的建议是升级,因为它通常很容易做到,而且您的计算机上可能已经有了 Visual Studio 附带的最新版本。
既然你更新了你的问题。
命令target_precompile_headers
没有按照您的想法执行。 你不在那里提供你的 PCH,你提供 header 应该是生成的 PCH 的一部分。 如果文件ugpch.h
包含headera.h
、 headerb.h
和headerc.h
,那么您的预编译 header 命令应如下所示:
target_precompile_headers(UGame PRIVATE headera.h headerb.h headerc.h)
实际预编译的 header 将由 CMake 生成。
当然,您仍然可以使用ugpch.h
作为您的预编译 header。 CMake 将简单地使用它来生成自己的。 正如你所观察到的。
之后,删除 header 的手动包含。 它将自动包含在内。
来自 CMake 文档:
header 文件列表用于生成名为 cmake_pch.h|xx 的 header 文件,用于生成预编译的 Z099FB995346F31C749F6E40DB0F395E3.p 文件。 cmake_pch.h|xx header 文件将被强制包含在所有源文件中(-include 用于 GCC,/FI 用于 MSVC),因此源不需要具有#include“pch.h”。
为什么它会像你问的那样工作? CMake 支持PUBLIC
预编译 header。 如果您链接到多个目标,每个目标都具有公共预编译标头,那么您的目标将继承所有这些标头。 由于编译器通常接受一个预编译的 header,因此 CMake 必须生成聚合头文件才能工作。
使用旧版本的 cmake ......我在 Visual Studio 中使用了 /Yc 和/Yu编译器标志。 它不像 target_precompile_headers(UGame PRIVATE Source/ugpch.h) 那样通用,但应该可以解决问题:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.