【问题标题】:How to compile with headers and a create a Makefile - C如何使用标头编译并创建 Makefile - C
【发布时间】:2017-10-15 16:00:32
【问题描述】:

我正在尝试使用按以下结构组织的源代码编译和创建 Makefile:

|-- build
|-- include
| \-- functions.h
\-- src
|-- functions.c
\-- main.c

那里编写的代码已经在 IDE 上进行了测试,所以我知道它可以工作。我只需要编译它,但我不知道如何执行 2 个扩展名为 .c 的文件和 .h 文件。另外,我需要为此创建一个生成文件。

怎么做?

【问题讨论】:

  • Reading this 可能会帮助您入门。
  • StackOverflow 不是一个做我的家庭作业的服务,但你应该用它来学习东西和问一些问题minimal reproducible example
  • 先尝试一些更简单的东西,比如没有makefile的HelloWorld

标签: c gcc makefile compilation header


【解决方案1】:

Makefile 只是一些文本文件(其中 tab 字符是 significant 至少在它们启动命令行时)。使用一些source code editor 来创建或改进它;我更喜欢GNU emacs,所以推荐它,但您可以使用其他编辑器(例如vimgedit 等...),这是一个品味问题。顺便说一句,别忘了使用一些版本控制系统(我推荐git)。

在创建Makefile 之前,请花一些时间阅读documentation of make。请注意许多内置规则(您可以通过运行make -p 获得)并利用它们。

如何执行2个.c文件和.h文件。

您不会执行 .c 文件,而是将它们提供给您的 C compiler。我推荐使用GCC(或者Clang/LLVM)作为你的C编译器。

您可能应该将CC make 变量(它提供默认的C 编译器)设置为gcc,并将CFLAGS 变量(它提供默认的编译器标志)。

请阅读有关Invoking GCC 的文档。您肯定希望在编译时包含所有警告和调试信息。

因此,我建议在您的Makefile 中包含以下两行

 CC= gcc
 CFLAGS= -Wall -Wextra -g

当然,您需要在Makefile 中添加其他行。我让您阅读更多内容并进行实验。 Thisthat 应该是鼓舞人心的。

您可能想在Makefile 中提及对头文件的依赖。

所以我让你你的Makefile。将其视为source code,因此请谨慎备份和版本控制。

顺便说一句,对于像你这样的小程序,我认为拥有src/include/ 目录没有用,而且我认为引入build/ 目录只会增加不必要的复杂性。 YMMV。

那里编写的代码已经在 IDE 上进行了测试,所以我知道它可以工作。

这可能是一种错觉。有时您可能会遇到一些 undefined behavior 的不幸,它只是“看起来”可以工作,但实际上是一个错误。请参阅this answer 并点击我在此处提供的链接。

make构建的free software项目很多;看看github 和其他地方找到一些。有时Makefiles 是自己生成的(例如使用cmakeqmakeautoconf),但在您的简单情况下这是不值得的。

PS。不要指望 StackOverflow 会做你的功课。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多