Makefile运行配置以生成自身。在继续之前是否可以重读
我有一个Makefile,它是由一个带有选项的configure脚本生成的 在configure.ac中:Makefile运行配置以生成自身。在继续之前是否可以重读,makefile,configure,Makefile,Configure,我有一个Makefile,它是由一个带有选项的configure脚本生成的 在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_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 type命令更改配置,而不必直接使用configure脚本)
Makefile会检测何时修改kconfig文件,在这种情况下,会运行configure脚本并修改Makefile
问题是Makefile正在继续,并且没有使用configure脚本修改的参数
如果再次运行make命令,则其工作正常(参数已更新)
当前使用的一种解决方法是在配置脚本完成后直接强制退出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
%.o:%.c$(HEADERS)$(SELF_MAKEFILE)$(PTXDIST_PROJECT)/platform myproject/state/myproject.prepare
gcc$(CFLAGS)-c-o$@$<
$(PTXDIST_项目)/平台myproject/state/myproject.prepare:$(PTXCONFIG_完整路径)
cd$(PTXDIST_项目);ptxdist准备我的项目
@回音============================================
@echo Makefile已被修改。请再跑一次
@回音============================================
出口1
注意:上面的ptxdist prepare myproject
命令正在运行配置脚本,然后触摸$(ptxdist\u PROJECT)/platform myproject/state/myproject.prepare
文件
如果可以要求Makefile在修改后再次读取它自己,以便它可以在一个步骤中运行而不会出错,那就更好了
你知道我该怎么做吗?automake生成的Makefiles知道如何重新运行autoconf,并在Makefiles等更改时进行配置。在我看来,如果将
ptxdist prepare myproject
命令的调用移到autoconf文件中,而不是makefile中,这样每次调用configure时都会执行,那么就不会出现这个问题
如果您不想这样做,那么make将在其包含的任何makefile发生更改时自动重新调用自身。当您回复上述Etan时,您没有说明myproject.prepare
的内容是什么,但如果只是一个空文件,被触动告知make的准备是最新的,您可以包括:
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)
PREPARE\u SENTINEL=$(PTXDIST\u PROJECT)/platform myproject/state/PREPARE.SENTINEL
%.o:%.c$(标题)$(自我制作文件)$(准备哨兵)
gcc$(CFLAGS)-c-o$@$<
$(准备哨兵):$(PTXCONFIG\u完整路径)
cd$(PTXDIST_项目);ptxdist准备我的项目
@触碰$@
包括$(准备哨兵)
是$(PTXDIST_PROJECT)/platform myproject/state/myproject。准备
用作makefile中的目标或先决条件?如果配置更改,它是用于重新编译项目的依赖项。我添加了Makefile的另一个规则。(无法添加所有456行长的Makefile)gcc
不使用该文件,为什么在每个.c
文件发生更改时都要重新编译?是包含在头文件还是其他文件中?这个文件包含什么?这个文件是空的,被触碰表示配置变更包括makefile就是我提问的地方。关于汽车制造的观点是一个很好的观点。谢谢,只是增加了包括工作。注意:我没有使用automake