是否应该从 C++ 中的静态库项目中删除 stdafx.h/.cpp? [关闭]
Posted
技术标签:
【中文标题】是否应该从 C++ 中的静态库项目中删除 stdafx.h/.cpp? [关闭]【英文标题】:Should stdafx.h/.cpp be removed from a static library project in C++? [closed] 【发布时间】:2018-07-16 16:37:43 【问题描述】:虽然我的静态库运行良好,但我注意到默认设置带有以下文件:
stdafx.h stdafx.cpp targetver.h我不希望这个库很大。我希望尽可能地最小化。需要 stdafx.h/.cpp 吗?
它们如何出现在我的项目中:
stdafx.h
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#pragma once
#include "targetver.h"
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
// TODO: reference additional headers your program requires here
#include "mathlib.h" // My main library
stdafx.cpp
// stdafx.cpp : source file that includes just the standard includes
// MathLib.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
// TODO: reference any additional headers you need in STDAFX.H
// and not in this file
targetver.h
#pragma once
// Including SDKDDKVer.h defines the highest available Windows platform.
// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
#include <SDKDDKVer.h>
【问题讨论】:
删除stdafx.h/.cpp
不会影响您的图书馆的大小,或者会以任何其他方式使其更精简。
如果我保留它,我认为我应该做这些事情? a) 每当我创建一个新的 cpp 文件时,唯一的#include 应该是 stdafx.h? b) 在 stdafx.h 中,我包含了我所有的库 .h 文件?
您是否完全掌握了启用预编译头文件的确切作用?最终它将减少花费在大型项目上的编译时间,这就是它的全部目的。
假设你的图书馆有一天可能会很大。总是一个不错的猜测,它们永远不会变小。默认项目模板和构建设置鼓励适合每个人的良好实践,丢弃它们需要额外的工作。
我理解他们。我不知道我是否需要它们,因此我的问题。
【参考方案1】:
如果你不使用预编译的头文件,你可以只删除文件,从代码中删除相关的包含。只有在实际使用该功能时才需要预编译的头文件。
同样在项目属性 -> C/C++ -> Precompiled headers 下,在 Precompiled Header 字段中选择 Not Using Precompiled Headers。
【讨论】:
【参考方案2】:在没有预编译头文件的情况下,即使是一个小型项目也可能需要很长时间才能编译,因为任何项目都间接包含许多 SDK 和标准库头文件。所以是的,您需要这些文件,不,删除它们不会得到任何有用的东西。没有它们,您的项目将非常缓慢地编译,这是您得到的唯一结果。
如果您还不知道这一点 - 标准头文件(如“windows.h”或“stdlib.h”)的所有包含都必须在“stdafx.h”中。这样,标准头文件将不会在每个项目构建(以及每个项目文件)上重新编译。
【讨论】:
以上是关于是否应该从 C++ 中的静态库项目中删除 stdafx.h/.cpp? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2010 不会自动链接来自依赖项的项目中的静态库,因为它应该是
使用 Visual Studio 2010 将 libexif 编译为静态库 - 然后从 Visual C++ 项目链接