c++ - C/C++:打印(配置)头文件的内容
问题描述
我有一个config.h
由 CMake 生成的,定义当前构建的设置,如下所示:
#ifndef CONFIG_H__
#define CONFIG_H__
#define CMAKE_BUILD_TYPE "Debug"
#define MY_GITHASH "@123456@"
#define MY_COMPILATION_DATE "2018-10-16"
#define MY_VERSION_MAJOR 1
#define MY_VERSION_MINOR 0
#endif /* CONFIG_H__ */
如何将其放入二进制文件中以便按需打印?我知道我可以将所有定义组合成一个新定义并打印出来。我正在寻找一个更直接的解决方案,它只打印整个头文件 - 理想情况下没有头文件的位置config.h
。
解决方案
- 不理想(
config.h
必须是知名的gas
地方) - 仅海湾合作委员会
测试.c:
extern const char config_h_begin;
extern const char config_h_end;
asm ("\t.section .rodata\n"
"config_h_begin: \n"
"\t .incbin \"config.h\"\n"
"config_h_end:\n"
);
const char *begin = &config_h_begin;
const char *end = &config_h_end;
$objdump -s test.o
test.o: file format elf64-x86-64
Contents of section .rodata:
0000 2369666e 64656620 5f5f434f 4e464947 #ifndef __CONFIG
0010 5f485f5f 0a236465 66696e65 205f5f43 _H__.#define __C
0020 4f4e4649 475f485f 5f0a0a23 636d616b ONFIG_H__..#cmak
0030 65646566 696e6520 434d414b 455f4255 edefine CMAKE_BU
0040 494c445f 54595045 20224465 62756722 ILD_TYPE "Debug"
0050 0a236465 66696e65 204d595f 47495448 .#define MY_GITH
0060 41534820 22403132 33343536 40220a23 ASH "@123456@".#
0070 64656669 6e65204d 595f434f 4d50494c define MY_COMPIL
0080 4154494f 4e5f4441 54452022 32303138 ATION_DATE "2018
0090 2d31302d 3136220a 23646566 696e6520 -10-16".#define
00a0 4d595f56 45525349 4f4e5f4d 414a4f52 MY_VERSION_MAJOR
00b0 20310a23 64656669 6e65204d 595f5645 1.#define MY_VE
00c0 5253494f 4e5f4d49 4e4f5220 300a0a23 RSION_MINOR 0..#
00d0 656e6469 66202f2a 205f5f43 4f4e4649 endif /* __CONFI
00e0 475f485f 5f202a2f 0a0a G_H__ */..
推荐阅读
- java - 如何在eclipse中导入javafx?
- python - 为什么我在 SQLITE3 中收到此语法错误?
- c++ - QML 错误:未知方法返回类型:std::string
- .net - dotNetRdf 中是否有任何类可以将本体上传到远程服务器中?
- r - 请求的 python 版本不能使用,因为另一个版本已在闪亮的应用程序中初始化
- javascript - PHP 网站中的 Square 支付网关集成不会重定向到支付门户
- python - 我应该使用哪些数据类型作为 redis-py 函数的参数?
- rxjs - Rxjs 间隔不轮询可观察的服务器 API 调用
- ssl - android pie中的握手失败
- excel - IF - AND 函数的结果问题