【问题标题】:How to compile with a makefile without deleting .o files?如何在不删除 .o 文件的情况下使用 makefile 进行编译?
【发布时间】: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
  • 这看起来应该可以了。

标签: c++ linux unix makefile


【解决方案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 可以(无需添加依赖项)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    相关资源
    最近更新 更多