【问题标题】:How to clean object files without using command 'make clean' when compiling with makefile?使用makefile编译时如何在不使用命令'make clean'的情况下清理目标文件?
【发布时间】:2014-11-08 02:13:26
【问题描述】:

我想知道的是如何编写一个编译程序的makefile,然后仅使用命令'make'删除在该过程中创建的目标文件,这样我就不必在之后运行命令'make clean'。这是我当前的生成文件:

prog: prog.o prog_func.o
    gcc prog.o prog_func.o -o prog -Wall -std=c99   
prog.o: prog.c prog_func.h
    gcc prog.c -c -Wall -std=c99 
prog_func.o: prog_func.c prog_func.h
    gcc prog_func.c -c -Wall -std=c99
clean:
    rm prog.o prog_func.o

编辑:

这就是它的完成方式:

prog: prog.o prog_func.o
    gcc prog.o prog_func.o -o prog -Wall -std=c99
    rm prog.o prog_func.o
prog.o: prog.c prog_func.h
    gcc prog.c -c -Wall -std=c99 
prog_func.o: prog_func.c prog_func.h
    gcc prog_func.c -c -Wall -std=c99

现在可以了。感谢您的快速回复。

【问题讨论】:

  • 这并不是一个普通的clean 目标首先要做的事情。它通常会破坏 所有 人为的文件,包括 .o 文件 最终输出目标。我怀疑你总是可以在链接到主要目标后删除 .o 文件(尽管它会引起你的疑惑为什么你会想要这样做)。
  • 这对我来说似乎毫无用处。 make 的全部意义在于它只重建已更改的文件。这就是为什么它有额外的语法来声明先决条件等。如果你每次都删除所有文件,那么一切都会重新构建,你不妨写一个小shell脚本,每次都重新编译所有东西,不要打扰完全是make

标签: c compilation makefile


【解决方案1】:

构建可执行文件后,您只需在可执行命令之后给出相同的命令(rm 命令)

【讨论】:

  • 就是这样。谢谢!
【解决方案2】:

这样编译不生成f文件怎么样

gcc -Wall -o prog prog.c

此命令不会产生 o 文件。

【讨论】:

    【解决方案3】:

    我刚刚举了一个示例。

    makebuild: clean prog                                
    prog: 
        gcc a.c -o a.o
    clean:
        rm a.o
    

    从命令行运行“make”将首先“rm”a.o 文件,然后运行“gcc a.c -o a.o”。这里唯一的问题是它第一次无法工作,因为 makebuild 首先调用 clean 并且它会抛出错误,因为它找不到 a.o 文件。仅当存在 a.o 文件时,您才必须检查“rm”。

    类似这样的:

    clean:
        if a.o exist
            rm a.o
    

    【讨论】:

    • 这叫rm -f
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    相关资源
    最近更新 更多