如果 makefile 文件更改,那么 make 命令会重新构建所有目标,对吧?
但是如何告诉 make 命令,在 makefile 文件更改后运行 make clean
命令,然后再运行 make
命令呢?
或者如何指示 make 在这种情况下运行其他命令?我是否需要编写一种特殊的目标?
如果 makefile 文件更改,那么 make 命令会重新构建所有目标,对吧?
但是如何告诉 make 命令,在 makefile 文件更改后运行 make clean
命令,然后再运行 make
命令呢?
或者如何指示 make 在这种情况下运行其他命令?我是否需要编写一种特殊的目标?
您可以尝试这样做:
all: Makefile.uptodate yourMainTarget
Makefile.uptodate: Makefile
make clean
touch Makefile.uptodate
我不是一个make
专家,所以我不知道那是否是一个可怕的hack,但在我的有限测试中它起作用了;-)
-j
иҝӣиЎҢ并иЎҢзј–иҜ‘пјҢиҝҷдјҡеҜјиҮҙй”ҷиҜҜпјҢеӣ дёәеҸҜиғҪеҗҢж—¶иҝҗиЎҢmake clean
е’ҢyourMainTarget
зҡ„жһ„е»әгҖӮ - C0deH4ckeryourMainTarget
添加一个依赖项:yourMainTarget: Makefile.uptodate <the rest of your dependencies>
。然后以类似的方式将其添加到所有其他目标中,例如编译C/C++代码的.o
文件等。这将强制在开始构建yourMainTarget
或其任何依赖项之前解析Makefile.uptodate
目标下的命令,从而允许清理在编译或运行任何内容之前完成。 - Keith M简单却有效(我想不到更优雅的词语):
include marker
marker: Makefile
@touch $@
$(MAKE) clean
$(MAKE)
$(MAKE)
;这应该由 Makefile 的初始条目处理。对吧?使用 include
很聪明! - Keith M我相信你想自动运行clean,因为每次调用make时都希望重新构建特定的目标。可以通过向要始终构建其目标的规则添加名为FORCE
的依赖项来实现此目的,然后像这样定义FORCE
:即无规则和依赖项。
FORCE:
%.o : %.cpp FORCE
$(CXX) -c $(CXXFLAGS) $< -o $@