C++编译器宏"Use Precompiled Headers"的状态
C++ Compiler Macro for Status of "Use Precompiled Headers"
它有一个预定义的c++编译器宏,我可以用它来告诉,文件是否编译与"使用预编译头","创建预编译头","不使用预编译头"?
查看@IronMensan的回答来了解这个宏的用途!
我不认为有什么,虽然我当然理解对一个的渴望。每当我必须在一个不支持PCH的系统上构建我的跨平台库时,它就会花费很长时间,因为很多文件都比它们真正需要的要多,所以最好把它修剪掉。不幸的是,由于Visual Studio处理PCH的方式,我不能。也就是说,包含PCH的必须是文件的第一个非注释行。从你提问的方式来看,我怀疑你也在使用Visual Studio。
我不确定这是否适合你,但你可以尝试这样做:
#include MY_PCH_FILE
和使用/DMY_PCH_FILE = " myfile.h "
来控制第一个包含文件是什么。在此之后,您可以完全控制包含的内容,并且大多数现代编译器中的适当头保护以及检测头保护的优化可以减少构建时间。您可以在项目的构建设置中更改单个文件的宏定义,其方式类似于更改每个文件的PCH设置。
虽然我必须承认我不确定你在做什么,我怀疑这真的是一个XY问题
Visual Studio/MSC不提供预定义的宏来携带/Y[-cdu]
编译器开关的设置,以便从源代码中进行检查。
然而,有一个解决方案,你正试图解决的问题,即控制源文件的第一个非注释行是否应该是#include "<my pch.h>"
: MSC提供/FI(名称强制包含文件)编译器开关。
该选项的效果与在命令行[…]
中指定的每个源文件的第一行使用#include指令中的双引号指定文件相同。
此编译器开关可以在编译器的命令行中指定,也可以通过IDE的GUI (Project -> Properties: C/c++ -> Advanced: Forced Include File)在每个项目的基础上指定。
使用/Y[-cdu]
和/FI
编译开关的组合,您可以从源代码外部控制使用并满足使用预编译头文件的要求。
在这种情况下,我认为您可以手动创建自己的宏。当你像这样使用预编译时,可以定义USE_PRECOMPILEDHDR和FORCED_INCLUDEHDR
#if USE_PRECOMPILEDHDR
#ifndef FORCED_INCLUDEHDR
#include "stdafx.h"
#endif
#else
//..manualy include all your headers
#endif
此功能不太可能存在。预编译头文件的全部意义在于,头文件将使用与实际编译时完全相同的编译器选项进行编译。如果编译器为您的代码提供了一种区分方法,那么您可以根据编译器是预编译还是实际编译,使代码表现不同(在预处理器级别)。
如果您希望根据是否启用预编译头文件来包含头文件,则应该使用include Guard。
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- OSX MetalKit CVMetalTextureCacheCreateTextureFromImage失败,状态:
- std::future_error:无关联状态
- 如何避免LED在循环状态变化中闪烁?
- boost 是否有按特殊类型值编码状态"compact optional"?
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 检查两个节点在子节点上是否具有相同状态的更优雅的方法
- 将有状态的 lambda 传递到 C 样式函数中,而无需上下文参数
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- C++部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?
- 试图在崇高中奔跑. 错误 已发生: 收集2.exe: 错误: ld 返回 1 退出状态
- 在容器上移动分配:以前包含的对象的状态
- 如何在 c++ 中理解这样的代码 [request->headers().Method()->value().getStringView())]
- collect2:错误:ld 返回 1 个退出状态未定义的引用
- 具有动态大小的特征矩阵的默认初始状态
- C++编译器宏"Use Precompiled Headers"的状态