C++ 如何使用makefile编译而不删除.o文件?

C++ 如何使用makefile编译而不删除.o文件?,c++,linux,unix,makefile,C++,Linux,Unix,Makefile,我对makefiles一点经验都没有,但我还是设法让我的工作正常了。 但是,当我修改一个文件并希望重新编译新版本时,我注意到我需要删除以前生成的de.o文件以进行新编译(否则,我被告知什么也做不了) 是否有任何选项可以添加到makefile中,使其用新的.o替换旧的.o(仅当它是旧版本时)?或者,至少,我认为我的解决方案是这样的 提前感谢, 爱德华多 这是我的Makefile,以防你需要 todo: Sensor Control Lista #Ficheros de los que depen

我对makefiles一点经验都没有,但我还是设法让我的工作正常了。 但是,当我修改一个文件并希望重新编译新版本时,我注意到我需要删除以前生成的de.o文件以进行新编译(否则,我被告知什么也做不了)

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

提前感谢,

爱德华多

这是我的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
的更多信息;尝试
make-p
了解内置规则。看,这看起来应该行得通。我还没能做到这一点,但这肯定是我的错!但这正是你所做的!!!这是比您选择的答案更好的答案。请检查文件的日期,可能是系统中使用错误的时钟生成了
.o
-s,或者您的FS没有更新修改时间…使用WIndows不起作用,但使用Linux可以(无需添加依赖项)。
Usage: make [options] [target] ...
Options:
  -b, -m                      Ignored for compatibility.
  -B, --always-make           Unconditionally make all targets.
...etc
Usage: make [options] [target] ...
Options:
  -b, -m                      Ignored for compatibility.
  -B, --always-make           Unconditionally make all targets.
...etc