【问题标题】:How to include all source files from a folder?如何包含文件夹中的所有源文件?
【发布时间】:2011-04-14 15:07:26
【问题描述】:

我已经把每个函数都放在了自己的文件中。

如何在不手动为每个文件重复 #include 的情况下一次包含所有这些功能?我不在乎函数的包含顺序。

来自数百个不同文件的所有函数都属于同一个组。实际上每个文件有4个功能。

【问题讨论】:

  • 快速和(可能)脏:您制作了一个“.h”,其中包含所有文件的包含列表。然后你包括这个“.h”。
  • 为什么你没有正确分组你的函数,所以现在包括一个 PITA?
  • @Raveline,您的评论可能是潜在的答案.. :)
  • @Newbie:如果他们都在同一个组中,那么你的标题设计非常糟糕。

标签: c++ visual-studio-2008 include


【解决方案1】:

C 还是C++ 的问题??

在 C++ 中,通常每个 都有文件,而不是函数。如果在每个类都有一个 .h 和 .cpp 文件之后,您仍然有数百个在一个目录中,您需要重新考虑您的设计。您可能需要更多抽象层,并且可以将文件划分为多个目录。

【讨论】:

  • 一个函数,一个文件规则至少有两个原因:链接器解析和更改传播。某些链接器具有仅在文件级别包含或排除函数的分辨率。在某些商店中,在进行更改时,更改影响其他功能的可能性较小。
  • 所以你建议我把这 500 个函数重新放在一个文件中?这将是可怕的编辑
  • @Newbie:您是说您有 500 个(!)功能密切相关,以至于您无法将它们分类并提供相关功能的类?出于好奇,你能举个例子吗?如果确实如此,那么,如上所述,拥有一个(或几个).h 文件和许多 .cpp 文件。然而,我建议尝试从类而不是函数的角度来思考。
  • @Thomas:我想这适用于 .cpp 文件,您仍然会在一个 .h 文件中拥有类定义,这与问题更相关。
  • 所以如果我制作 cpp 文件,它们会自动包含进来吗?
【解决方案2】:

使用预构建步骤并执行如下批处理文件:

@echo off
setlocal 
set file=test.h
echo // generated > %file%
for %%f in (*.h) do echo #include "%%f" >> %file%

然后包含 test.h。

在VS2008中可以在“Project”-“Properties”-“Configuration Properties”-“Build Events”-“PreBuild Event”中添加prebuild步骤。

将“命令行”设置为 $(项目目录)\test.cmd 并将test.cmd(内容如上)复制到项目目录中。

【讨论】:

  • @Newbie:我们不知道您使用哪些工具来构建您的软件。使用任何看起来合适的方式自动生成所有 .h 文件的列表。
【解决方案3】:

考虑您的文件。

file1.h

int plus(int a, int b);

file2.h

int minus(int a, int b);

file3.h

int mult(int a, int b);

file4.h

void drawcircle(int r, int xc, int yc);

文件5.h

void drawsquare(int x0, int y0, int x1, int y1);

文件6.h

void printresults();

现在将您的文件分组。制作以下文件。

math_funcs.h

#include "file1.h"
#include "file2.h"
#include "file3.h"

draw_funcs.h

#include "file4.h"
#include "file5.h"

output_funcs.h

#include "file6.h"

然后制作all.h 文件。

all.h

#include "math_funcs.h"
#include "draw_funcs.h"
#include "output_funcs.h"

【讨论】:

  • 呃...所有功能都属于同一组,这不会解决包括问题在内的手册。将来我将不得不包含大约数百个文件,而且我必须手动编写每个#include 行,这很糟糕。
  • 不,此解决方案允许您仅包含 all.h,这将依次拉入所有列出的标头。
  • @Newbie:每次你写一个文件,你写一个包含在“something.h”中(也许一个包含在“all.h”中的“something.h”)。这确实是最好的解决方案。
  • 我不想更新任何不重要的东西......我不在乎包含文件的顺序,而且会有数百个
【解决方案4】:
  1. 您将所有包含函数定义(函数体)的文件添加到您的项目中
  2. 您编写了 一个 包含函数声明的头文件。
  3. 您可以在需要的地方包含该标题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 2012-11-15
    • 2012-02-22
    • 1970-01-01
    • 2014-01-14
    • 2015-04-20
    • 1970-01-01
    相关资源
    最近更新 更多