有人可以告诉我如何创建这个非常简单的 makefile 吗?

标签 c unix gcc makefile

这是在 C 中,我通过 Putty 运行 UNIX 并且想要创建一个 Makefile。

所以我有一个程序只在一个文件“recommender.c”中,我需要制作一个 makefile,使用 all 函数创建一个名为 recommender 的可执行文件。我不知道该怎么做的部分是我使用 gcc recommender.c -std=gnu99 行编译 recommender.c 我不知道如何确保它也执行 -std=gun99 部分。请帮忙? :)

最佳答案

CFLAGS=-std=gnu99 -Wall -Wextra -O3

all: recommender

recommender: recommender.o

请注意,文件扩展名必须是 .c 如果它具有扩展名 .cpp 则需要 CXXFLAGS 而不是 CFLAGS

一些解释:

make 文件是基于依赖关系的,如您所见,您可以在 make 文件之上设置变量。然后当调用 make 程序时,它将在当前目录中搜索 Makefile

由于默认操作是 all 它将搜索 all 规则。 当它找到 all 规则时,它将检查在这种情况下需要哪些依赖项 recommender 规则/文件,因此它再次开始搜索规则并发现它需要 recommender.o 规则/文件,但它找不到任何东西,现在神奇的地方就在这里。

make 足够聪明,知道 .o(目标)文件是从 .c 或 .cpp(源)文件生成的,所以现在它将开始在当前目录中搜索源文件目录。他通过用 .c 替换 .o 来做到这一点,如果它找到文件,它将使用 gcc 编译器编译它,如果它在哪里可以找到 .cpp 文件,它将使用 g++ 编译器编译它。

现在我们知道了这一点,我们可以通过添加更多目标文件作为依赖项来简单地将多个源文件添加到项目中。

现在你真的不需要首先创建一个目标文件,因为你是从一个源文件编译的,你也可以删除 recommender: recommender.o 规则,make 将尝试创建 recommender 应用通过编译recommender.c.cpp

关于有人可以告诉我如何创建这个非常简单的 makefile 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6024679/

相关文章:

linux - 如果文件的列匹配,则 AWK 过滤文件

c - 默认文件描述符表无法正常工作

unix - 为什么我不应该使用查找优化?

c - 为什么编译器不会对错误的 extern 声明发出错误?

c - 将 $(sysconfdir) 从 Autoconf/Automake 传递到源代码

c - 需要帮助理解功能逻辑

c - 一堆字符串

c - 等待功能不停

c - Trie实现逻辑错误?

c - gcc 找不到-lX11