如何在CMake中为Visual Studio生成器添加预编译头

蛛形纲

CMake 3.18; VS 2019;

我正在学习CMake,并检查我的结果,试图生成Visual Studio项目。我当前的问题是预编译头选项。我要实现的是VS项目将具有带有正确文件名的“ / use”或“ / create”预编译头选项。

在我的项目文件夹中,我已经有ugpch.h和ugpch.cpp文件,它们代表预编译的头文件。我已经尝试在cmakelist中使用target_precompile_headers(UGame PRIVATE Source/ugpch.h)指令,但这对我的Visual Studio预编译头选项没有影响。正确的方法是什么?

编辑:我已经将我的cmake更新到3.18版本,但是仍然没有在生成的Visual Studio项目中期望的效果。相反,我发现了新的文件夹“预编译头文件”与cmake_pch.cxx文件。它看起来像target_precompile_headers做了完全不同的东西从我的预期

纪尧姆·拉西科特(Guillaume Racicot)

该命令target_precompile_headers已在CMake 3.16中添加。

您将不得不升级您的CMake发行版(VS2019中附带的发行版是最新的)或从安装程序安装最新版本。

否则,您必须将cotire用于预编译的头文件,但是我的建议是升级,因为通常这样做很容易,并且Visual Studio附带的计算机上可能已经具有最新版本。


自从您更新了问题。

该命令target_precompile_headers没有按照您的想法做。您不在那里提供您的PCH,而是提供什么头应该是所生成的PCH的一部分。如果文件ugpch.h包含headera.hheaderb.hheaderc.h,则您的预编译头命令应如下所示:

target_precompile_headers(UGame PRIVATE headera.h headerb.h headerc.h)

实际的预编译头将由CMake生成。

当然,您仍然可以将其ugpch.h用作预编译头。CMake只会使用它来生成自己的。正如您所观察到的。

之后,删除标题的手动包含。它会自动包含在内。

从CMake文档中:

头文件列表用于生成名为cmake_pch.h | xx的头文件,该头文件用于生成预编译的头文件(.pch,.gch,.pchi)工件。cmake_pch.h | xx头文件将被强制包括在所有源文件中(对于GCC为-include,对于MSVC为/ FI),因此源无需具有#include“ pch.h”。

为什么这样工作?CMake支持PUBLIC预编译头。如果链接到每个都有公共预编译头的多个目标,则您的目标将继承所有这些头。由于编译器通常接受一个预编译头,因此CMake必须生成聚集头才能正常工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Linux版本的CMAKE中添加CMAKE生成器?

Visual Studio 2015中的预编译头错误

如何在CMake中包含外部代码生成器?

Visual Studio 2012查询生成器

什么是Visual Studio 2019的cmake生成器

如何在Visual Studio 2013 Express中安装单元测试生成器扩展

预编译的Clang无法看到Visual Studio标头

与CMake交叉编译时的Makefile生成器规范

在Visual Studio 2013中打开报表生成器报表

如何在Xcode中的预编译头之前添加执行shell命令的步骤?

如何在列内添加自动换行生成器

如何使用架构生成器添加虚拟列?

如何比较生成器并添加其布尔值

在Laravel 5.4的查询生成器中添加lists()方法

在字符串生成器中添加单引号

如何在CMake中输出生成器表达式的结果?

如何在新生成器中重用现有的 CMake 变量

POJO 生成器中的 Android Studio 错误

什么是CMake生成器?

如何在生成器表达式Python中添加限制

如何在服务生成器类的改造中添加HTTP拦截器

如何在 Yii2 查询生成器的订单条件中添加比较?

如何在Visual Studio 2017中使用CMake设置编译器选项

如何在Elasticsearch中检查为不同令牌生成器生成的令牌

Visual Studio 2017控制台应用程序:预编译头

如何在Mac上使用c ++ 2a编译生成器和协程

如何在Visual Studio Code中为JavaScript启用Intellisense

如何在Visual Studio 2015中为TypeScript配置IntelliSense?

如何在Visual Studio 2017中为C ++安装Npgsql