我的问题与C源文件有关。让我试着用简单的术语来解释。假设我有2个可执行文件如下-
main1.exe
-通过链接main1.c
、f1.c
、f2.c
创建main2.exe
-通过链接main2.c
、f2.c
、f3.c
创建
我需要用一些自定义文本标记这些代码文件,以便可以标识用于构建可执行文件的代码版本。例如,我更改了f2.c
并将编译限制为仅创建main1.exe
因此,根据一些自定义文本,我想确定main1.exe
包含f2.c
的更改版本,而main2.exe
没有。基本上,像下面这样的grep
命令应该确认main1.exe
有自定义文本,而main2.exe
没有。
grep <custom text> *.exe
是否有任何指令/宏可以定义来实现这一点?
或者,我可以简单地添加一个注解/* f2.c_version_xxx */
和grep
这个文本。然而,我想检查C是否提供了任何可以用来满足此要求的功能。
2条答案
按热度按时间cdmah0mi1#
您可以使用两个不同的值添加
-D
preprocessor option:f2.c
也可以像这样使用const char:
f2.c
因为
version_cstr
是一个常量变量,它的内容应该放在只读部分,你可以在执行之前使用objdump
来查找version_cstr
的值:nafvub8i2#
如果要重新编译源文件的所有依赖项,则应使用生成系统。这就是它们的作用考虑使用CMake而不是Makefile或IDE。
我用一些自定义文本标记这些代码文件,这样我就可以识别用于构建可执行文件的代码版本
很好。为每个源文件生成一个版本,例如md5 sum,并将其嵌入到可执行文件中。在“c-预处理器”或C中,没有任何可用的东西,你可以用它来标记你的问题。