如何在不删除 .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 进行编译?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 JCL 中的 XSUM 的情况下从输入文件中删除重复项并将重复项写入文件? [关闭]