CMake 3.18; VS 2019;
我正在学习CMake并检查结果,试图生成Visual Studio项目。
我当前的问题是预编译头选项。
我要实现的是VS项目将具有带有正确文件名的“/ use”或“/ create”预编译头选项。
在我的项目文件夹中,我已经有ugpch.h和ugpch.cpp文件,它们代表预编译的头文件。
我尝试在cmakelists中使用target_precompile_headers(UGame PRIVATE Source/ugpch.h)
指令,但这对我的Visual Studio预编译头选项没有影响。
正确的方法是什么?
编辑:我已经将cmake更新到3.18版本,但是仍然没有在生成的Visual Studio项目中期望的效果。
相反,我发现了带有cmake_pch.cxx文件的新文件夹“Precompile header 文件”。看起来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支持
PUBLIC
预编译头。如果链接到每个都有公共(public)预编译头的多个目标,则您的目标将继承所有这些头。由于编译器通常接受一个预编译头,因此CMake必须生成聚集头才能正常工作。关于c++ - 如何在CMake中为Visual Studio生成器添加预编译头,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62541168/