【发布时间】:2021-02-05 11:17:37
【问题描述】:
我第一次尝试使用预编译的头文件。使用命令行。就是这样:
cl /Yu"pch.h" src/main.cpp src/shader.cpp src/camera.cpp /std:c++17 /MT -EHsc glfw3.lib glew32.lib GlU32.lib OpenGL32.lib -I include /link "pch.obj" /LIBPATH:"C:\Users\yuryi\Desktop\C++\CMDOGL\lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /OUT:"C:\Users\user\Desktop\C++\CMDOGL\a.exe" /MACHINE:X64 /nologo
但它会打印:pch.obj : LNK2011: precompiled object not linked in. image may not run。我无法弄清楚如何链接它。我想我是使用 /link "pch.obj" 做到的。注意:/Yc"pch.h" 成功
文件结构:
- main.cpp
- pch.cpp
- pch.h
- shader.cpp
- shader.h
- camera.cpp
- camera.h
pch.cpp 就是 #include "pch.h"。 pch.h 包括项目所需的一切。所有其他文件仅包含 pch.h。
我尝试过的事情:
- 谷歌搜索 2 小时(MS 文档等)
- 以不同方式调整命令行
【问题讨论】:
-
看起来
pch.cpp不在列表中:src/main.cpp src/shader.cpp src/camera.cpp -
好吧。它修复了这个确切的错误,但现在我有不一致的错误
src/camera.cpp(1): fatal error C1854: cannot overwrite information formed during creation of the precompiled header in object file: 'C:\Users\user\Desktop\C++\CMDOGL\camera.obj'(有时与 shader.cpp)。我想这个问题已经结束了 -
我的建议是进入您的项目设置并完全禁用预编译头文件。然后从所有源文件中删除
#include "pch.h"。当您没有 10,000 行代码和/或许多大型外部 3rd 方库依赖项时,这是最好的。预编译的头文件并不能真正帮助学术作业中使用的典型项目。如果有的话,它们会导致此类小型项目的构建时间增加。 -
@dxiv 您的评论比其他任何评论都更有帮助。我添加了 bat 文件来自动化几个 cmd,现在我的编译速度非常快!
标签: c++ visual-c++ command-line linker precompiled-headers