可以使用从源文件读取的值来分配makefile变量吗?

Man*_*bes 5 c makefile

假设有一个C程序,它将其版本存储char*在main.c 中的全局中.构建系统(gnu make)可以在构建时以某种方式提取此变量的值,以便构建的可执行文件可以具有程序中显示的确切版本名称吗?

我想要实现的是,鉴于来源:

char g_version[] = "Superprogram 1.32 build 1142";
Run Code Online (Sandbox Code Playgroud)

构建系统将生成一个名为的可执行文件 Superprogram 1.32 build 1142.exe

Ign*_*ams 5

shell功能允许您调用外部应用程序,例如sed可用于解析源所需的详细信息.


Sim*_*son 5

从宏定义您的版本变量:

char g_version[] = VERSION;
Run Code Online (Sandbox Code Playgroud)

然后让makefile在编译时在命令行上放置-D参数

gcc hack.c -DVERSION=\"Superprogram\ 1.99\"
Run Code Online (Sandbox Code Playgroud)

当然,您应该在您的示例中使用sed/grep/awk等来生成您的版本字符串.