C ++动态分配标头

时间:2014-10-21 12:18:37

标签: c++ header-files dynamically-generated

我想实现多个应用程序,它们彼此共享主要(或者一般来说,我们可以说是.cpp文件)。

让我解释一下。鉴于dir结构是这样的:

 - main.cpp
 -- app1
 --- app1.cpp
 --- app1.h
 -- app2
 --- app2.cpp
 --- app2.h
 -- ...

我想使用相同的main.cpp编译N app,但标题不同。让我们说,像这样:

app1 := main.cpp + app1.cpp
app2 := main.cpp + app2.cpp

作为伪代码,main.cpp应该是这样的,但我不知道如何在标题上分配标题:

# main.cpp
foreach sub_dir
  # create a main with only the headers in this subdir
  foreach headers_in_subdirs
   <include "sub_dir/header.h">
  end

# rest of the main omitted

一种可能的解决方案是复制每个子目录中的main.cpp,但这样代码就无法维护。遗憾的是,重新组合一个大的子应用程序是不可能的应用程序目的。

编译方面不是问题(我使用makefile中的单个命令查询),但问题是:如何动态分配标题

2 个答案:

答案 0 :(得分:3)

您可以将预定义的宏传递给编译器,以选择要包含的标头:

#if APP == 1
#include "something_1"
#include "something_else_1"
#elif APP == 2
#include "something_2"
#include "something_else_2"
#else
#error No such app
#endif

或者,如果您在一个文件下收集所需的标题,则可以预先定义标题本身的名称。

答案 1 :(得分:1)

这里有一些可能的解决方案,所以你需要选择你喜欢的东西,在这种情况下客观分析是非常困难的。我会做这样的事情:

使您的主要应用程序无关,例如

# main.cpp
<include "header.h">
# rest of the main omitted

将不同版本的“header.h”文件放入每个子目录中。现在通过指定特定于应用程序的设置来生成(部分)makefile,例如要编译的.cpp文件以及包含目录(“app1”,“app2”等)的内容,以便编译器可以找到相应的“header.h”。可以通过Bash或Python或其他任何方式完成。或者只是硬编码makefile,如果您的应用程序集稳定。