c - 使用批处理文件更改 .c 文件顶部的数字
问题描述
我需要为我的工作编译 400 多个 C 程序,源代码之间的唯一区别是代码第一行中的静态变量。
我想编写一个批处理文件,它会自动编辑和编译这 400 个程序,并将 .exe 文件保存在单独的文件夹中。
.exe 文件的编译和移动不是问题,但我不知道如何使用批处理文件在第一行增加这个静态变量。第一行是这样的:
#define PROGRAM_NUMBER 20
对于每个编译的程序,我需要将该数字从 1 更改为 400。
这可能吗?我怎样才能得到一个批处理文件来做到这一点?
在此先感谢您的帮助。
目前批处理文件如下所示:
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64
devenv "Project.vcxproj" /build Release
因为它们是需要编译的 Visual Studio 项目。
解决方案
您可以使用-D
命令行选项将值从调用编译器的命令行传递给宏定义。
https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
-D name=definition 定义的内容被标记和处理,就好像它们出现在“#define”指令中的第三阶段一样。特别是,定义被嵌入的换行符截断。
如果您从 shell 或类似 shell 的程序调用预处理器,您可能需要使用 shell 的引用语法来保护字符,例如在 shell 语法中有意义的空格。
如果您希望在命令行上定义类似函数的宏,请在等号(如果有)之前用括号括住其参数列表。括号对大多数 shell 都有意义,因此您应该引用该选项。使用 sh 和 csh,-D'name(args...)=definition' 有效。
-D 和 -U 选项按照它们在命令行中给出的顺序进行处理。在所有 -D 和 -U 选项之后处理所有 -imacros 文件和 -include 文件选项。
即,如果您通常将其称为(非常简化),例如
gcc myfile.c
那么,如果你打电话给喜欢
gcc -D PROGRAM_NUMBER=20 myfile.c
它基本上会编译相同,但也好像文件以
#define PROGRAM_NUMBER 20
在第一行。
Basile 的不错推荐,引用:
With GCC compile with warnings and debug info,所以
gcc -Wall -Wextra -g -DPROGRAM_NUMBER=20
并使用GDB调试器
end-of-quote
这反过来意味着您不需要具有不同#define
s 的文件的多个副本,您可以一遍又一遍地使用相同的副本。
我只是建议从这个健全性检查开始:
#ifndef PROGRAM_NUMBER
#error The PROGRAM_NUMBER has to be defined!
#endif
对于 Microsoft/D
似乎可以解决问题:
https ://docs.microsoft.com/en-us/cpp/build/reference/d-preprocessor-definitions?view=vs-2019
推荐阅读
- javascript - Chrome 扩展中消息传递范围的绑定
- python - 如何在 google colab 中运行下载/克隆的 github 代码?
- java - Spring SchedulingConfigurer 重试限制
- python - 为什么 Python 没有读过这个线程?
- intellij-idea - 我所有的 JetBrains 都无法使用 IDEA.exe 启动(单击时无响应),但它可以通过 idea.pat 启动
- r - R中的分组和条件总结
- python - 使用 ID 检索二维数组数据
- python - 如何让我的播放器与我的平台发生全方位碰撞
- javascript - Javascript按多个分组并在新字段中计数
- r - 有没有办法在 R 函数中循环?