如何自动包含目录中的所有标头

JRL*_*JRL 10 c++ include

我正在阅读C++书籍的练习.对于每个练习,我想最小化我必须编写的样板代码.我以某种方式设置了我的项目,但它似乎不对,需要进行太多更改.

现在我有一个main.cpp包含以下内容的文件:

#include "e0614.h"
int main()
{
    E0614 ex;
    ex.solve();
}
Run Code Online (Sandbox Code Playgroud)

每次我从练习中创建一个新类时,我都必须修改此文件以更改包含的标题的名称以及我正在实例化的类.

所以我的问题是:

  1. 我可以在目录中包含所有标题,所以至少我不需要更改该#include行吗?
  2. 更好的是,我可以重写我的解决方案,这样我甚至main.cpp不需要触摸,没有一个文件包含每个练习的所有代码吗?

更新:

我最终遵循Poita_的建议,通过脚本生成main.cpp.

由于我使用的是IDE(Visual Studio),我希望将其与它集成,因此对其进行了一些研究.对于那些对如何感兴趣的人,请继续阅读(这是公平的,但并非完全,直截了当).

Visual Studio允许您通过工具 - >外部工具菜单使用外部工具,并包含一组预定义的变量,例如$(ItemFileName,可以传递给工具.所以在这个例子中我使用了一个简单的批处理文件,它在Visual Studio中传递了当前所选文件的名称.

要将该工具添加到工具栏,请右键单击工具栏,选择"自定义" - >"命令" - >"工具",然后选择"外部命令X"并将其拖动到工具栏.用与您创建的工具对应的数字替换X. 我的安装包含工具 - >外部工具中列出的5个默认预先存在的工具,因此我创建的工具是工具编号6.您必须弄清楚这个数字,因为它没有显示.然后,您可以为快捷方式指定一个图标(它是下面显示的BuildMain命令):

alt text http://img691.imageshack.us/img691/4853/capturerg.png

Pet*_*der 15

  1. 不,如果你想做的话,你必须把它们全部包括在内.

  2. 不,至少,不是一种实际上会节省打字的方式.

当然,您可以编写一个脚本来为您创建main.cpp ...


bta*_*bta 9

如果使用构建代码make,则应该能够执行此操作.

我可以在目录中包含所有标题,这样至少我不需要更改#include行吗?

将您的包含行更改为类似的内容#include <all_headers.h>.现在,您可以all_headers.h使用以下目标自动生成Makefile :

all_headers.h:
    for i in `ls *.h`; do echo "#include <$i>" >>all_headers.h; done
Run Code Online (Sandbox Code Playgroud)

确保all_headers.h在"干净"时删除.

更好的是,我可以重写我的解决方案,这样我甚至不必触及main.cpp,而没有一个文件包含每个练习的所有代码吗?

如果你用a抽象你的课,你可以这样做typedef.在您的示例中,将您的类名更改E0614myClass(或某些内容).现在,在for上面的循环下面的Makefile中添加一行代码echo "typedef "$MY_TYPE" myClass;" >>all_headers.h.在构建程序时,使用类似的东西调用'make',make MY_TYPE=E0614你的typedef将自动填入你想要测试的类.