代码之家  ›  专栏  ›  技术社区  ›  Brian Hooper

生成Makefile依赖项不检查头

  •  1
  • Brian Hooper  · 技术社区  · 14 年前

    我正在使用一个makefile来自动生成依赖项。但是在我的文件中,我发现尽管对头文件的更改会导致代码重新编译,但它们不会导致依赖项重新生成,这是我认为应该的。有人能看到我错过了什么吗?

    .SUFFIXES : .hpp .cpp .d .o
    SOURCES=main.cpp sub1.cpp sub2.cpp
    OBJECTS=${SOURCES:.cpp=.o}
    DEPENDENCIES=${SOURCES:.cpp=.d}
    
    .cpp.d:
        g++ -MM $< > $@
    .cpp.o:
        g++ $< -c `pkg-config gtkmm-2.4 --cflags --libs` -g
    
    calculator: ${OBJECTS} ${DEPENDENCIES}
        g++ ${OBJECTS} -o calculator `pkg-config gtkmm-2.4 --cflags --libs` -g
    
    include ${DEPENDENCIES}
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   Dummy00001    14 年前

    official GNU make documentation .

    生成依赖项的行应该如下所示:

    .cpp.d:
            g++ -MM $< | sed 's!^$(<:.cpp=.o):!$(<:.cpp=.o) $(<:.cpp=.d):!' > $@
    

    sed将依赖关系行从“main.o:main.cpp include/hello.hpp”转换为“main.o main.d:main.cpp include/hello.hpp”(来自最小化测试的示例),从而使.d依赖于与.o文件本身相同的文件。

    虽然我个人建议使用例如。 SCons 它能够自动跟踪依赖关系,因为(根据我的经验)当引入新的头文件或重命名某些文件时,GNU make解决方案经常中断。

        2
  •  2
  •   nagavamsikrishna    14 年前

    i、 e.如果 g++ -MM $<

    test.o: test.cpp test.h dummy.h etc_bkp.h
    

    然后 g++ -MM -MP $< 生成

    test.o: test.cpp test.h dummy.h etc_bkp.h
    test.h:
    dummy.h:
    etc_bkp.h:
    

    这将有助于使不打破即使重命名已完成或文件已被删除