如何在不删除 .o 文件的情况下使用 makefile 进行编译?

Posted

技术标签:

【中文标题】如何在不删除 .o 文件的情况下使用 makefile 进行编译?【英文标题】:How to compile with a makefile without deleting .o files? 【发布时间】:2015-12-07 15:39:26 【问题描述】:

我完全没有使用 makefile 的经验,但我设法让我的工作。 但是,当我修改文件并希望再次编译新版本时,我刚刚注意到我需要删除之前生成的 de .o 文件才能进行新编译(否则,我被告知无能为力) .

是否有任何选项可以添加到 makefile 中以使其用新的 .o 替换旧的 .o(仅当它是旧版本时)?或者,至少,我认为我的解决方案可能是这样。

提前致谢,

爱德华多

PD:这里有我的 Makefile,以备不时之需。

todo: Sensor Control Lista

#Ficheros de los que depende
Sensor: Sensor.o semaforo.o memocomp.o colamsg.o
    #Cómo crea esos ficheros
    g++ Sensor.o semaforo.o memocomp.o colamsg.o -o Sensor -lrt -lpthread

Control: Control.o semaforo.o memocomp.o colamsg.o
    g++ Control.o semaforo.o memocomp.o colamsg.o -o Control -lrt -lpthread

Lista: Lista.o semaforo.o memocomp.o colamsg.o
    g++ Lista.o semaforo.o memocomp.o colamsg.o -o Lista -lrt -lpthread

#Compilación de cada uno de esos ficheros
Sensor.o: Sensor.cpp semaforo.hpp memocomp.hpp colamsg.hpp
    g++ -c Sensor.cpp

Control.o: Control.cpp semaforo.hpp memocomp.hpp colamsg.hpp
    g++ -c Control.cpp

Lista.o: Lista.cpp semaforo.hpp memocomp.hpp colamsg.hpp
    g++ -c Lista.cpp

semaforo.o: semaforo.cpp semaforo.hpp
    g++ -c semaforo.cpp

memocomp.o: memocomp.cpp memocomp.hpp
    g++ -c memocomp.cpp

colamsg.o: colamsg.cpp colamsg.hpp
    g++ -c colamsg.cpp


#Elimina los ficheros creados previamente por el usuario ****
clean:
    rm /dev/shm/sem.1207*
    rm /dev/shm/1207*
    rm /dev/mqueue/1207*

【问题讨论】:

阅读更多关于make的信息;尝试make -p 了解内置规则。看this 这看起来应该可以了。 【参考方案1】:
Usage: make [options] [target] ...
Options:
  -b, -m                      Ignored for compatibility.
  -B, --always-make           Unconditionally make all targets.
...etc

【讨论】:

【参考方案2】:
colamsg.o: colamsg.cpp colamsg.hpp
^target    ^dependencies

只要列出了每个目标的所有依赖项,您就不必做任何事情

Make 会注意到目标文件已过期。

【讨论】:

我没能做到这一点,但这肯定是我的错! 但这正是你所做的!!!这是比您选择的更好的答案。 检查文件的日期,可能.o-s是在时钟错误的系统中生成的,或者您的FS没有更新修改时间... 使用 WIndows 不行,但使用 Linux 可以(无需添加依赖项)。

以上是关于如何在不删除 .o 文件的情况下使用 makefile 进行编译?的主要内容,如果未能解决你的问题,请参考以下文章

makefie文件的基本说明和使用

如何在不使用 JCL 中的 XSUM 的情况下从输入文件中删除重复项并将重复项写入文件? [关闭]

如何在不删除现有数据的情况下写入文件[重复]

如何在不删除内容的情况下取消暂存大量文件

如何在不删除目标文件夹内容的情况下使用 Visual Studio 2008 中的“发布”功能?

如何在不从磁盘中删除文件的情况下 git rm 文件? [复制]