【发布时间】:2012-12-20 10:53:44
【问题描述】:
我有一个文件module.hpp
struct ModuleBase {
virtual void run() = 0;
};
还有一个main.cpp 程序
int main() {
cout << ...?...; // here should go the contents of module.hpp
}
我可以在...?... 输入什么来让这里打印头文件的内容?
一个基本的想法是
int main() {
static const string content = R"(
#include <module.hpp>
)";
cout << content;
}
但多行字符串仅在 C++11 中可用,#include 不 在多行字符串中工作(这很好)吗?
如果 gcc 有一种非便携式的方式......那将是一个开始。
澄清(更新):替换应该在编译时完成。
【问题讨论】:
-
AFAIK 除了你使用的那个之外别无他法,除非你愿意使用流打开文件并输出它。
-
在Windows下是一种不可移植的方式将header嵌入到可执行文件中,但在其他系统下无法使用。
-
gcc 还有一种不可移植的方式。你有源代码,所以你可以修改编译器来做任何你想做的事情。 (是的,我在开玩笑。)
-
@JamesKanze:不那么夸张,您可以使用
objcopy -O binary将标头转换为包含其内容的目标文件。 -
迈克西摩:是的!请给个完整的答案好吗?那么如何使用/链接我的 C(++) 代码中的 obj 文件 sysmbols?
标签: c++ compiler-construction syntax self-modifying