Makefile 如何根据以前的编译更改make行为?

Makefile 如何根据以前的编译更改make行为?,makefile,gnu-make,Makefile,Gnu Make,我有一个很大的makefile,配置了几个虚假目标。一个用调试标志编译程序,一个用优化标志编译程序,等等 我遇到的一个问题是,当您以前使用一个目标,但后来指定另一个目标时,它不知道需要使用新的标志集重新编译所有文件 例如,我使用调试目标编译所有内容。编译后,我测试程序。看到并没有问题,我试着用优化目标运行make,但它并没有编译任何东西,因为make认为一切都是最新的 我只是想让对象文件的位置取决于选择的目标,但除此之外,我什么都没有 有什么方法可以优雅地处理这个问题吗?这种事情会被自动捕获。这

我有一个很大的makefile,配置了几个虚假目标。一个用调试标志编译程序,一个用优化标志编译程序,等等

我遇到的一个问题是,当您以前使用一个目标,但后来指定另一个目标时,它不知道需要使用新的标志集重新编译所有文件

例如,我使用调试目标编译所有内容。编译后,我测试程序。看到并没有问题,我试着用优化目标运行make,但它并没有编译任何东西,因为make认为一切都是最新的

我只是想让对象文件的位置取决于选择的目标,但除此之外,我什么都没有


有什么方法可以优雅地处理这个问题吗?

这种事情会被自动捕获。

这种事情会被自动捕获。

你的Makefiles把编译好的
.o
文件放在哪里了?谢谢,我没有看到这个问题,部分原因是我没有用同样的方式表达我的问题。谢谢你发现了。我也投票关闭了。你的Makefiles把编译的
.o
文件放在哪里了?谢谢,我没有看到这个问题,部分原因是我的问题措辞不够相似。谢谢你发现了。我也投票决定结束。
# Assuming you already know the type of new build
# and it is stored in this variable.
BUILD_TYPE := release

ifneq ($(MAKECMDGOALS),__clean)

# This file stores the type of the last build.
-include .last_build_type.mk

ifneq ($(__last_build_type),$(BUILD_TYPE))
.PHONY : .last_build_type.mk
.last_build_type.mk :
    @$(MAKE) __clean
    @echo '__last_build_type := $(BUILD_TYPE)' > $@
endif

else

.PHONY : __clean
__clean : clean # Delegate the job to your real 'clean' target.

endif