c - 什么是 C 的高效工作流程? - 生成文件 + bash 脚本

标签 c bash makefile compilation

我正在处理我的第一个项目,它将跨越多个 C 文件。对于我的前几个练习程序,我只是在 main.c 中编写代码并使用 gcc main.c -o main 进行编译。这在我学习时对我有用。

现在,我正在独自从事一个更大的项目。我想继续自己进行编译(或至少手动设置),这样我才能理解这个过程。阅读了一下之后,我决定制作一个 Makefile。

注意:我也在使用 GTK+,所以我不得不查找如何将它添加到编译命令中。

这是经过一些研究后的样子:

main:
    gcc -Wall -g main.c -o main `pkg-config --cflags --libs gtk+-2.0`

起初,我只是在运行“make”。然后我遇到了一些问题,即使我已经更改了文件,也会出现错误“main is up to date”。

所以我写了一个脚本:

#!/bin/bash
rm main
make
./main

所以我进行更改,然后运行此脚本。

这是一个好的/正常的系统吗?我想要可扩展的系统,因为我的项目会增长。我假设我可以保留该脚本,只需将依赖项添加到 makefile 并更改 makefile 中的主要编译命令。我说得对吗?

提前致谢。

编辑:

感谢有关如何修复我的 Makefile 的反馈。

典型的编译过程也是如此 1) 输入 make 然后 2) ./main 不管项目是如何设置的或者它的大小(假设你已经写了一个正确的 makefile)?

最佳答案

你需要告诉 make main 依赖于 main.c。这样,每次您对 main.c 进行更改然后运行 ​​make 时,都会重新生成 main。要删除 main,您可以使用一个名为 clean 的虚假目标作为:

main:main.c
    gcc -Wall -g main.c -o main `pkg-config --cflags --libs gtk+-2.0`

.PHONY: clean
clean:
    rm -f main

现在要删除 main 你可以这样做:make clean

如果你得到 make: main is up to date. 这意味着你没有修改 main.c 因此不需要重新生成 main 。但是,如果您必须强制重新生成 main,即使依赖项尚未更新,您也可以按照建议使用 make-B 选项Sjoerd在其他答案中。

关于c - 什么是 C 的高效工作流程? - 生成文件 + bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3624200/

上一篇:c - C 中的链表

下一篇:C 预处理器魔法

相关文章:

makefile - 为 Gtk 制作文件

makefile - 依赖符号 "|"

通过 Unix 系统服务 (USS) 中的 Shell 在 z/OS 上编译 C 程序

c - 将特定范围的所有 UTF-8 字符打印为 utf-8 编码文本

c++ - 如何在不使用 argv 和 argc 的情况下将总和值传递给 C++ 程序

bash - 如何提取具有公共(public)字段的行

c - 从C中的字符串中检索字母

c - 有没有比使用多个 return 语句更好的在 c 中返回值的方法?

bash - 在 expect 脚本中输入 sudo 密码

c++ - Makefile:在全局变量初始化之前通过 'make all' 命令运行 bash 脚本