【发布时间】:2017-08-02 06:15:54
【问题描述】:
假设我有两个头文件 A.hpp 和 B.hpp 和 A.hpp 通过 #include "A.hpp" 语句包含在第二个文件中。现在在分发头文件时,我想要另一个选项,其中包含一个头文件A_B.hpp,其中包含与粘贴在其#include 语句上的A.hpp 的内容完全相同的代码。
现在我手动复制粘贴内容,因为版本较少且文件大小不大,但有没有一种自动化的方式来做这样的事情?类似command B.hpp > A_B.hpp
要记住的另一件事,我不想要其他预处理器的东西,比如宏扩展、操作系统检测特定的宏,比如 -
#if defined(__unix__) || defined(__unix) || defined(__linux__)
#define OS_LINUX
#elif defined(WIN32) || defined(_WIN32) || defined(_WIN64)
#define OS_WIN
#elif defined(__APPLE__) || defined(__MACH__)
#define OS_MAC
#else
#error Unknown Platform
#endif
进行评估,因为它们需要出现在最终文件中。也欢迎任何其他方式来执行此类任务。
【问题讨论】:
-
写个小程序来做,
#include的语法没那么复杂。 -
@RichardCritten 当然,如果某些编译器的预处理器中不存在此类功能,我可以并且会这样做。
-
"现在在分发头文件时,我想要另一个选项,其中包括一个头文件 A_B.hpp,其中包含与粘贴在其#include 上的 A.hpp 的内容完全相同的代码声明。” 为什么?
-
@BaummitAugen 让我们说出偏好:) 还易于部署和用户友好。其他人也在这样做 - sqlite.org/amalgamation.html
-
如果你只有几个标题,你可以稍微不同地解决这个问题。假设
A.hpp包含保护A_H_INCLUDED_,然后在B.h中,包含A 为#ifndef A_H_INCLUDED_ #include "A.h" #endif,以此类推。然后,您可以通过简单地将所有 A.h 和 B.h 复制到 A_B.h 中来创建合并,这可以说比用文件的内容替换#include "A.h"更容易。
标签: c++ c gcc clang c-preprocessor