我有一个项目,我经常修改标题,当我这样做时,忘记make clean
然后make
,我会得到各种奇怪的行为。我目前正在使用Qt Creator作为我的IDE,但我已经看到这发生在一个独立于Qt的项目上。我的项目变得相当大,每次我更改标题时都必须重建,这种方法正变得无用。有什么想法吗?
供将来参考:
如果使用QMake系统:
DEPENDPATH += . \ HeaderLocation1/ \ HeaderLocation2/ \ HeaderLocation2/HeaderSubLocation1/ \ HeaderLocation2/HeaderSubLocation2/ \ HeaderLocation2/HeaderSubLocation3/ \ HeaderLocation2/HeaderSubLocation4/ \ HeaderLocation2/HeaderSubLocation5/ \ HeaderLocation3/ \ HeaderLocation3/HeaderSubLocation1/ \ HeaderLocation3/HeaderSubLocation2/ \
答案 0 :(得分: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
答案 1 :(得分:3)
不了解您的IDE,也不确定它是否相关,并且因为您没有包含您的makefile - 我只是陈述显而易见的 - 您是否使用任何自动生成的依赖项?
对于g ++,我使用-MD
标志,然后在makefile中包含$(wildcard bin/*.d)
(取决于创建目标文件的位置,我的是'bin'创建的)
还要确保删除干净构建中的dep文件
答案 2 :(得分:2)
解决方案是在makefile中拥有正确的头依赖项。
1)使用makedepend生成依赖项文件。您将向makefile添加一个目标,该目标将重新生成依赖项文件,并且您希望在实际编译之前调用该目标。 2)仅限GCC:在编译行上使用'-MMD'和'-MP'选项.c / .cpp文件。这会导致GCC为输入文件生成依赖项文件。然后,您可以在makefile中包含这些内容。这里的优点是,使用这两个选项,当您添加和删除标题时,它应该按预期运行。
答案 3 :(得分:1)
这主要是由文件之间的依赖关系引起的。因此,如果您更改包含在另一个文件中的.h文件,则还需要重新编译该文件。因此,您需要减少包含,或者以.h / .cpp形式进行编码,以便在.cpp中更频繁地进行更改.h。
答案 4 :(得分: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
别忘了在clean build
上添加delete * .d文件