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
做了完全不同的东西从我的预期
该命令target_precompile_headers
已在CMake 3.16中添加。
您将不得不升级您的CMake发行版(VS2019中附带的发行版是最新的)或从安装程序安装最新版本。
否则,您必须将cotire用于预编译的头文件,但是我的建议是升级,因为通常这样做很容易,并且Visual Studio附带的计算机上可能已经具有最新版本。
自从您更新了问题。
该命令target_precompile_headers
没有按照您的想法做。您不在那里提供您的PCH,而是提供什么头应该是所生成的PCH的一部分。如果文件ugpch.h
包含headera.h
,headerb.h
和headerc.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] 删除。
我来说两句