我正在尝试简化应用程序的部署。为了在最终用户的机器上构建最终应用程序,需要编译几个 C 文件。这意味着需要将许多头文件与应用程序一起发送。我希望能够预先包含包含文件的内容,但是我还需要能够在包含后控制指令(#if
等)在内衬。我找不到一个cpp选项,它允许我只包含标题,而不进行其余的预处理。我有什么选择?
示例:
File1.h
void dummy_func()
{return;}
File2.h
#if INCLUDE_FILE1
#include "file1.h"
#endif
最后,我想要一个文件说:
#if INCLUDE_FILE1
void dummy_func()
{return;}
#endif
答案 0 :(得分:0)
如何使用#ifdef来控制编译哪些#if部分?
答案 1 :(得分:0)
为了在最终用户的机器上构建最终应用程序,需要编译几个C文件。这意味着需要将许多头文件与应用程序一起发送。
那又怎样?如果你将所有文件(包括标题)放入tarball中,并且你有一个理智的构建系统(你做至少有一个Makefile,不是吗?),有一个问题是什么?很多文件?
答案 2 :(得分:0)
由于双重包含警卫,内联#includes的工具可能会导致一个巨大的文件,其中许多标题完全位于#ifndefs内部,不匹配。在极端情况下,它甚至可能导致无限大小的输出文件,如果包含是递归的(由于双重包含警卫,这通常不是问题)。
我刚刚确认此代码已成功编译:
main.cpp中:
#include "a.h"
int main() { return 0; }
A.H:
#ifndef A_H_INCLUDED
#define A_H_INCLUDED
#include "b.h"
#endif
b.h:
#ifndef B_H_INCLUDED
#define B_H_INCLUDED
#include "a.h"
#endif
由于您希望保持ifdef不受影响和未解析,因此内联#includes
的工具会导致无限输出。