【发布时间】:2014-12-29 12:59:53
【问题描述】:
我正在为嵌入式 (AVR) 开发,我的项目看起来像这样:
库/ - foobar.h -utils.h 主程序 生成文件编译它很容易,基本上是ave-gcc main.c 加上一些额外的标志。
但是,如果我想添加更大的内容并将文件拆分为 h 和 c:
库/ - big_file.h // 原型 - big_file.c // 实现 - foobar.h -utils.h 主程序 生成文件然后我必须在gcc 命令中包含这个.c 文件。
我发现如果我只是将所有内容放在标题中,这个问题就消失了。我真的不想每次做这样的事情时都编辑我的 Makefile。
这会导致任何真正的问题吗?
我不关心“最佳实践”,如果它意味着更容易使用。
【问题讨论】:
-
如果您尝试从多个位置包含该 uber-header,您将收到链接器错误。这听起来像是一个真正的问题。
-
即使使用 #pragma once 或包含警卫?
-
“位置”是指“翻译单位”。所以如果你从“main.c”和“some_other.c”中包含它,你会遇到问题。
-
我不确定你想让我们告诉你什么 ;) 是的,如果你非常小心/严谨并且你只有一个消费者并且你不关心编译时间的潜在增加,那么这很有效。 (这很明显,您实际上只是将所有“库”代码复制粘贴到您的消费者 .c 文件中。)
-
毕竟,您也可以将所有内容都放在一个源文件中,因此没有“真正的”理由不按照您想要的方式进行操作。您只需要小心...如果您的原因只是为了避免对 Makefile 进行任何更改,那么这是一个(非常)糟糕的原因!对于每个添加的文件,您只需修改一次 makefile(开销非常低!)。并且存在可以帮助您完成此类任务的工具:makedepend(例如)。还有易于设置的 makefile 变量和默认值来为您完成大部分任务!
标签: c gcc makefile embedded avr