我想实现多个应用程序,它们彼此共享主要(或者一般来说,我们可以说是.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
中的单个命令查询),但问题是:如何动态分配标题?
答案 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,如果您的应用程序集稳定。