8

我有一个项目,我经常修改标题,当我这样做时,忘记了make cleanmake我得到了各种奇怪的行为。我目前正在使用 Qt Creator 作为我的 IDE,但我已经看到这种情况发生在一个独立于 Qt 的项目中。我的项目变得相当大,每次更改标题时都必须重新构建,这变得没有效率。有什么想法吗?

备查:

如果使用 QMake 系统:

依赖路径 += 。\
    页眉位置1/\
    页眉位置2/\
    页眉位置 2/页眉子位置 1/\
    标头位置 2/标头子位置 2/\
    页眉位置2/页眉子位置3/\
    页眉位置 2/页眉子位置 4/\
    页眉位置 2/页眉子位置 5/\
    页眉位置3/\
    页眉位置 3/页眉子位置 1/\
    页眉位置 3/页眉子位置 2/\
4

5 回答 5

5

重新运行qmake。这将生成一个新的 Makefile,它将具有适当的依赖关系。

例子:

如下所示的文件file.h

#include "some.h"
#include "header.h"
#include "files.h"
...

file.cpp看起来像下面这样:

#include "file.h"
...

并在您的.pro

HEADERS += file.h some.h header.h files.h
SOURCES += file.cpp

将在结果中产生以下内容Makefile

file.o: ../src/file.cpp ../src/file.h \
        ../src/some.h \
        ../src/header.h \
        ../src/files.h
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o file.o ../src/file.cpp
于 2012-05-17T23:59:37.690 回答
3

对您的 IDE 一无所知,也不确定它是否相关,并且由于您没有包含您的 makefile - 我只是说明显而易见的 - 您是否使用任何自动生成的依赖项?

对于 g++,我使用-MD标志,然后在 makefile 中包含$(wildcard bin/*.d)(取决于您的目标文件的创建位置,我的目标文件是在“bin”中创建的)

还要确保在干净的构建上删除 dep 文件

于 2012-05-17T14:45:05.810 回答
2

解决方案是在您的 makefile 中具有适当的头文件依赖项。

1) 使用 makedepend 生成依赖文件。您将在生成依赖文件的 makefile 中添加一个目标,并且您希望在实际进行编译之前调用它。2) 仅 GCC:在 .c/.cpp 文件的编译行上使用“-MMD”和“-MP”选项。这会导致 GCC 为输入文件生成一个依赖文件。然后,您可以将它们包含在您的 makefile 中。这里的优点是,使用这两个选项,当您添加和删除标头时,它的行为应该符合您的预期。

于 2012-05-17T14:47:09.700 回答
1

这主要是由文件之间的依赖关系引起的。因此,如果您更改包含在另一个文件中的 .h 文件,则该文件也需要重新编译。因此,您要么需要减少包含,要么尽可能以 .h/.cpp 形式进行编码,以使 .cpp 比 .h 更频繁地进行更改。

于 2012-05-17T14:39:42.717 回答
1

这是我自己的 makefile 的摘录,它生成和使用在编译期间自动创建的依赖文件。您必须为 cpp 文件添加一个额外的条目

%.o : %.c
    $(CC) -M $(CFLAGS) -o $*.P $<
    @cp $*.P $*.d; \
            sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
                -e '/^$$/ d' -e 's/$$/ :/' < $*.P >> $*.d; \
            rm -f $*.P
    $(CC) $(CFLAGS) -c $< -o $@

-include *.d

不要忘记在干净的构建上添加删除 *.d 文件

于 2012-05-17T14:58:53.857 回答