我有一个非常大的代码库(阅读:数千个模块),其中的代码在许多项目中共享,这些项目都运行在具有不同 C++ 编译器的不同操作系统上。不用说,维护构建过程可能是一件苦差事。
如果有办法让预处理器忽略某些 #includes
,代码库中有几个地方会大量清理代码。如果当前文件夹中不存在该文件。有谁知道实现这一目标的方法吗?
目前,我们使用 #ifdef
周围#include
在共享文件中,带有第二个特定于项目的文件,该文件 #defines 是否 #include
存在于项目中。这有效,但它很丑。人们在从项目中添加或删除文件时经常忘记正确更新定义。我已经考虑编写一个预构建工具来保持这个文件是最新的,但是如果有一种独立于平台的方式来使用预处理器来做到这一点,我宁愿这样做。有什么想法吗?
最佳答案
小更新
某些编译器可能支持 __has_include ( header-name )
。
扩展名已添加到 C++17 standard (P0061R1)。
编译器支持
- 叮当
- 来自 5.X 的 GCC
- VS2015 Update 2 中的 Visual Studio (?)
示例(来自 clang 网站):
// Note the two possible file name string formats.
#if __has_include("myinclude.h") && __has_include(<stdint.h>)
# include "myinclude.h"
#endif
来源
关于c++ - 可以使用 C 预处理器来判断文件是否存在吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/142877/