config.h 被认为有害
许多用 C 或 C++ 编写的程序都使用一个名为 “config.h” 的文件,其中包含 #define 语句,用于控制程序的编译。这些程序几乎总是使用 ‘make’ 构建的。
我认为这两个属性是相互冲突的。或者,用外行的话来说,“config.h 真烂”。问题在于,当 config.h 中有多个选项时,每个可能根据其中定义的值进行不同编译的文件都必须在 config.h 更改时重新编译。
正确的编译时选项方法是拥有一个 config 子目录,其中包含大量 .h 文件,每个文件都有自己的 #define。这些文件很容易管理,因为每个文件只有一个 #define,并且当源文件提到要定义的内容时,它需要 #include 该配置文件。 ‘make’ 程序可以通过查看每个源文件中包含的头文件来轻松地获知这些依赖关系。
因此,当您更改一个选项时,只有依赖于它的文件才会被重新编译。
我写这篇博文时正在等待一个程序重新编译,因为我更改了 config.h … 而且它在一台相当强大的机器上仍然没有完成重新编译。啊,刚刚完成了。
当然,当您重写 Makefile(就像 GNU automake 所做的那样)时,这会被完全打乱,但那是另一篇文章的主题。