【发布时间】:2014-09-25 04:47:40
【问题描述】:
我正在使用第三方开源项目,需要去掉不活动的#ifs、#ifdefs 等,以便更好地理解代码流。
有没有办法在没有这些指令的情况下使用 make 来生成源文件的版本?我想避免扩展宏,只删除指令。
我在看 https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html
似乎 -dD 和 -fdirectives-only 是不错的选择。
这些预处理文件会出现在哪里?我在哪里添加这些命令以与 Makefile 和“make”一起使用? 我尝试运行“make -n”来生成一个脚本,并在 -Wformat 之后向脚本中的 g++ 和 gcc 调用添加选项,但我没有注意到任何事情。
我不确定这是否会使任何事情复杂化,但我也在使用 avr-gcc 和 avr-g++。
我查看了 coan,它不支持 #included #defines,因此它不能用于此目的,而且我无法让 sunifdef 工作。有没有办法用预处理器做到这一点。
定义分散在当前文件、包含文件和包含指定 -Dfoo=opt 选项的 makefile 中。
【问题讨论】:
-
您可以 fork 一个库并获得一个开源项目的“仅适用于我的机器”版本。但是不要指望任何人在你完成后支持或贡献它,他们把那些#ifdefs 放入代码中汗流浃背。有点像青少年性行为,一个错误,你将不得不在你的余生中支持它:)
-
是的,但是当流程被无数指令所掩盖时,可能很难理解发生了什么。
-
不知道
sunifdef是什么,可能是unifdef的一些分支。为什么它对你没有帮助? -
是什么使 sunifdef 和 unifdef 不适合您?这正是他们的目的。
-
“我无法让 sunifdef 工作”——所以您已经有了问题的答案。正确的问题应该旨在让它发挥作用。