在阅读了这篇精彩的文章(预编译标题的关注和喂养)之后,我对这些文章在现实生活中如何实际起作用存在疑问.更具体地说,我怎么知道在以下场景中我需要触发预编译头的重建:
#define在我的一个.cpp文件中改变预处理器解释已经包含在我的预编译头中的一些头的方式#define是特定的预处理器指令,它改变了预处理器解释已经包含在预编译头中的标头的方式#include其他标头时,前一个问题可以递归发生是否应该使用预编译的头文件强制执行某种限制性编码样式,例如将.cpp文件中包含的头文件数限制为一个并且永远不会将#define内容限制在.cpp文件中?
虽然微软的编译器可能在预先编译的头文件中做了不错的工作(通过应用一些特定于MS的voodoo),因为据我所知,它提供了应该做所有管道的选项/Yc和/Yu选项,对于GCC来说,似乎这个功能需要Makefile中的大量手动工作和创造力,我无法找到应该解决使用预编译头文件的所有陷阱的模板.
例如,如果我有一个构建多个库的项目,为了在每次更改后不重建所有库,我必须在Makefile中使用一些非常可爱的sed技巧来检测#include当前库中的一个头文件是否被修改(或者它#include是一个修改过的标题).我担心甚至会想到预先构建的头文件实际上意味着的复杂性,以便构建脚本在每次必要时重建它们.
当您用 C++ 构建可执行文件时,包含头文件时
例如,
#include <iostream>
预处理器是否找到库 iostream 库和使用的函数,或者是在链接时注入的库函数的目标代码?