【发布时间】:2022-08-17 22:26:55
【问题描述】:
标签: c++ visual-studio compilation glm-math precompiled-headers
标签: c++ visual-studio compilation glm-math precompiled-headers
(提交答案以便其他人知道我做了什么,但感谢@john 在 cmets 中的回答)
预编译的标头使我的构建时间从 2 分钟缩短到 10 秒(!)
为了在空项目中使用 Visual Studio 中的“预编译头文件”,我遵循的步骤是:
pch.h 和pch.cpp 文件添加到项目中。pch.cpp的属性中C++->precompiled header下设置为Create (/Yc),头文件名设置为pch.h(你可以自己取名字, stdafx.h 和 pch.h 只是 Visual Studio 将选择的默认名称。)pch.cpp 应该有 #include "pch.h" 因为它是唯一的一行。该编译单元将首先编译并生成所有其他编译单元现在可以重用的编译器状态。*.cpp 文件的属性中(不必是所有文件),您必须进入它们的属性(ctrl+单击或拖动以执行此操作)一次多个文件),并在 C++ -> precompiled header 下将其设置为 Use (/Yu) 并使用相同的 pch.h 标头名称。pch.h,因为这是第一个操作。这是因为当编译器遇到该行时,它会丢弃它的当前状态(#include "pch.h" 之前的所有内容)并使用它在编译 pch.cpp 单元时生成的状态。pch.h,就可以了。
对我来说,我的 pch.h 标头最终看起来像这样:
#pragma once
#include <vector>
#include <string>
#include <map>
#include <queue>
#include <mutex>
#include <chrono>
#include <atomic>
#include <condition_variable>
#include <cstdint>
#include <cstdarg>
#include <cctype>
#include <cstring>
#include <cstdlib>
#include <utility>
#include <cmath>
#define GLM_FORCE_RADIANS
#define GLM_FORCE_LEFT_HANDED
#define GLM_ENABLE_EXPERIMENTAL
#include <glm/glm.hpp>
#include <glm/detail/func_common.hpp>
#include <glm/trigonometric.hpp>
#include <glm/gtc/constants.hpp>
#include <glm/gtc/bitfield.hpp>
#include <glm/gtc/round.hpp>
#include <glm/gtx/rotate_vector.hpp>
#include <glm/gtx/vector_angle.hpp>
#include <glm/gtx/quaternion.hpp>
请注意,我并不是在谈论这个问题的权威,如果有用的话,我只是把我为自己做的事情放在这里;如果有更优雅的方式来做到这一点,我不会感到惊讶。
【讨论】: