我有一个Makefile,它由带有选项
的配置脚本生成在configure.ac中:
AC_ARG_ENABLE([mmi],
AS_HELP_STRING([--enable-mmi], [Add the mmi function]),
[
AC_MSG_NOTICE([ * MMI: enabled])
AC_DEFINE([WITH_MMI], [1])
AC_SUBST(with_mmi, 1)
],
[
AC_MSG_NOTICE([ * MMI: disabled])
AC_SUBST(with_mmi, 0)
])
此选项也在kconfig文件中定义(因此我们可以使用menuconfig类型命令更改配置,而不必直接使用配置脚本)
Makefile检测kconfig文件何时被修改,在这种情况下运行configure脚本并修改Makefile。
问题是Makefile正在继续,而不是使用configure脚本修改的参数。
如果make命令第二次运行,它可以正常工作(param更新)
目前使用的解决方法是在配置脚本完成后直接强制退出Makefile。
在Makefile.in中:
%.o: %.c $(HEADERS) $(SELF_MAKEFILE) $(PTXDIST_PROJECT)/platform-myproject/state/myproject.prepare
gcc $(CFLAGS) -c -o $@ $<
$(PTXDIST_PROJECT)/platform-myproject/state/myproject.prepare: $(PTXCONFIG_FULL_PATH)
cd $(PTXDIST_PROJECT); ptxdist prepare myproject
@echo ============================================
@echo Makefile has been modified. Please run again
@echo ============================================
exit 1
注意:上面ptxdist prepare myproject
命令正在运行配置脚本,然后触摸$(PTXDIST_PROJECT)/platform-myproject/state/myproject.prepare
文件
如果可以让Makefile再次读取它,如果它被修改以便可以一步运行而没有错误,那就更好了。
关于如何实现这一目标的任何想法?
答案 0 :(得分:2)
由automake生成的makefile知道重新运行autoconf,并在makefile等更改时进行配置。在我看来,如果你将ptxdist prepare myproject
命令的调用移动到autoconf文件中,而不是在makefile中,以便每次调用configure时它总是被执行,那么你就赢了。有这个问题。
如果您不想这样做,那么如果任何包含的makefile发生更改,make将自动重新调用。当你回复上面的Etan时,你并没有说出myproject.prepare
的内容是什么,但是如果它只是一个空的文件被触及告诉你准备是最新的你可以包括的是:
include $(PTXDIST_PROJECT)/platform-myproject/state/myproject.prepare
它会发生。如果此文件不为空并且包含您不能包含为makefile的内容,那么您可以更改内容以便它只触及空文件:
PREPARE_SENTINEL = $(PTXDIST_PROJECT)/platform-myproject/state/prepare.sentinel
%.o: %.c $(HEADERS) $(SELF_MAKEFILE) $(PREPARE_SENTINEL)
gcc $(CFLAGS) -c -o $@ $<
$(PREPARE_SENTINEL): $(PTXCONFIG_FULL_PATH)
cd $(PTXDIST_PROJECT); ptxdist prepare myproject
@touch $@
include $(PREPARE_SENTINEL)