* "make xconfig" fails with "No rule to make target …/qconf-moc.cc …"
@ 2024-06-24 8:56 Rolf Eike Beer
2024-06-24 11:04 ` Nicolas Schier
0 siblings, 1 reply; 2+ messages in thread
From: Rolf Eike Beer @ 2024-06-24 8:56 UTC (permalink / raw)
To: Masahiro Yamada; +Cc: linux-kbuild
[-- Attachment #1: Type: text/plain, Size: 2815 bytes --]
$ make O=~/repos/build/linux/ xconfig V=1
make -f linux/scripts/Makefile.build obj=scripts/kconfig xconfig
# HOSTCXX scripts/kconfig/qconf.o
g++ -Wp,-MMD,scripts/kconfig/.qconf.o.d -Wall -O2 -std=c++11 -fPIC -I/usr/include/qt6/QtCore -I/usr/include/qt6 -DQT_CORE_LIB -I/usr/lib64/qt6/mkspecs/linux-g++ -I/usr/include/qt6/QtGui -DQT_GUI_LIB -I/usr/include/qt6/QtWidgets -DQT_WIDGETS_LIB -std=c++17 -I ./scripts/kconfig -c -o scripts/kconfig/qconf.o linux/scripts/kconfig/qconf.cc
make[3]: *** No rule to make target 'linux/scripts/kconfig/qconf-moc.cc', needed by 'scripts/kconfig/qconf-moc.o'. Stop.
The culprit seems to be 0e912c03208075b95ea726076bf1b45db8419bc2. If I revert
this like the following I'm able to do "make xconfig" again:
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -198,22 +198,22 @@ $(addprefix $(obj)/, mconf.o $(lxdialog)): | $(obj)/mconf-cflags
# qconf: Used for the xconfig target based on Qt
hostprogs += qconf
-qconf-cxxobjs := qconf.o qconf-moc.o
+qconf-cxxobjs := qconf.o
qconf-objs := images.o $(common-objs)
HOSTLDLIBS_qconf = $(call read-file, $(obj)/qconf-libs)
HOSTCXXFLAGS_qconf.o = -std=c++11 -fPIC $(call read-file, $(obj)/qconf-cflags)
-HOSTCXXFLAGS_qconf-moc.o = -std=c++11 -fPIC $(call read-file, $(obj)/qconf-cflags)
$(obj)/qconf: | $(obj)/qconf-libs
-$(obj)/qconf.o $(obj)/qconf-moc.o: | $(obj)/qconf-cflags
+$(obj)/qconf.o: | $(obj)/qconf-cflags
+$(obj)/qconf.o: $(obj)/qconf.moc
quiet_cmd_moc = MOC $@
- cmd_moc = $(call read-file, $(obj)/qconf-bin)/moc $< -o $@
+ cmd_moc = $(call read-file, $(obj)/qconf-bin)/moc -i $< -o $@
-$(obj)/qconf-moc.cc: $(src)/qconf.h FORCE | $(obj)/qconf-bin
+$(obj)/%.moc: $(src)/%.h FORCE | $(obj)/qconf-bin
$(call if_changed,moc)
-targets += qconf-moc.cc
+targets += qconf.moc
# gconf: Used for the gconfig target based on GTK+
hostprogs += gconf
diff --git a/scripts/kconfig/qconf.cc b/scripts/kconfig/qconf.cc
index c6c42c0f4e5d..283b427f4321 100644
--- a/scripts/kconfig/qconf.cc
+++ b/scripts/kconfig/qconf.cc
@@ -25,6 +25,7 @@
#include "lkc.h"
#include "qconf.h"
+#include "qconf.moc"
#include "images.h"
I don't think this is the proper solution, but at least it works. I hope you
find a better way to fix this.
Regards,
Eike
--
Rolf Eike Beer
emlix GmbH
Headquarters: Berliner Str. 12, 37073 Göttingen, Germany
Phone +49 (0)551 30664-0, e-mail info@emlix.com
District Court of Göttingen, Registry Number HR B 3160
Managing Directors: Heike Jordan, Dr. Uwe Kracke
VAT ID No. DE 205 198 055
Office Berlin: Panoramastr. 1, 10178 Berlin, Germany
Office Bonn: Bachstr. 6, 53115 Bonn, Germany
http://www.emlix.com
emlix - your embedded Linux partner
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 313 bytes --]
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: "make xconfig" fails with "No rule to make target …/qconf-moc.cc …"
2024-06-24 8:56 "make xconfig" fails with "No rule to make target …/qconf-moc.cc …" Rolf Eike Beer
@ 2024-06-24 11:04 ` Nicolas Schier
0 siblings, 0 replies; 2+ messages in thread
From: Nicolas Schier @ 2024-06-24 11:04 UTC (permalink / raw)
To: Rolf Eike Beer; +Cc: Masahiro Yamada, linux-kbuild
On Mon, Jun 24, 2024 at 10:56:41AM +0200, Rolf Eike Beer wrote:
> $ make O=~/repos/build/linux/ xconfig V=1
>
> make -f linux/scripts/Makefile.build obj=scripts/kconfig xconfig
> # HOSTCXX scripts/kconfig/qconf.o
> g++ -Wp,-MMD,scripts/kconfig/.qconf.o.d -Wall -O2 -std=c++11 -fPIC -I/usr/include/qt6/QtCore -I/usr/include/qt6 -DQT_CORE_LIB -I/usr/lib64/qt6/mkspecs/linux-g++ -I/usr/include/qt6/QtGui -DQT_GUI_LIB -I/usr/include/qt6/QtWidgets -DQT_WIDGETS_LIB -std=c++17 -I ./scripts/kconfig -c -o scripts/kconfig/qconf.o linux/scripts/kconfig/qconf.cc
> make[3]: *** No rule to make target 'linux/scripts/kconfig/qconf-moc.cc', needed by 'scripts/kconfig/qconf-moc.o'. Stop.
Thanks for your report. I can reproduce it and bisect led me to commit
b1992c3772e6 ("kbuild: use $(src) instead of $(srctree)/$(src) for
source directory", 2024-04-27). We missed to adjust the host-cxxobjs
rule appropriately; this should fix the issue with less effort:
diff --git a/scripts/Makefile.host b/scripts/Makefile.host
index d35f55e0d141..e85be7721a48 100644
--- a/scripts/Makefile.host
+++ b/scripts/Makefile.host
@@ -146,5 +146,5 @@ $(call multi_depend, $(host-cxxmulti), , -objs -cxxobjs)
# Create .o file from a single .cc (C++) file
quiet_cmd_host-cxxobjs = HOSTCXX $@
cmd_host-cxxobjs = $(HOSTCXX) $(hostcxx_flags) -c -o $@ $<
-$(host-cxxobjs): $(obj)/%.o: $(src)/%.cc FORCE
+$(host-cxxobjs): $(obj)/%.o: $(obj)/%.cc FORCE
$(call if_changed_dep,host-cxxobjs)
I am going to send a proper patch.
Kind regards,
Nicolas
> The culprit seems to be 0e912c03208075b95ea726076bf1b45db8419bc2. If I revert
> this like the following I'm able to do "make xconfig" again:
>
> --- a/scripts/kconfig/Makefile
> +++ b/scripts/kconfig/Makefile
> @@ -198,22 +198,22 @@ $(addprefix $(obj)/, mconf.o $(lxdialog)): | $(obj)/mconf-cflags
>
> # qconf: Used for the xconfig target based on Qt
> hostprogs += qconf
> -qconf-cxxobjs := qconf.o qconf-moc.o
> +qconf-cxxobjs := qconf.o
> qconf-objs := images.o $(common-objs)
>
> HOSTLDLIBS_qconf = $(call read-file, $(obj)/qconf-libs)
> HOSTCXXFLAGS_qconf.o = -std=c++11 -fPIC $(call read-file, $(obj)/qconf-cflags)
> -HOSTCXXFLAGS_qconf-moc.o = -std=c++11 -fPIC $(call read-file, $(obj)/qconf-cflags)
> $(obj)/qconf: | $(obj)/qconf-libs
> -$(obj)/qconf.o $(obj)/qconf-moc.o: | $(obj)/qconf-cflags
> +$(obj)/qconf.o: | $(obj)/qconf-cflags
> +$(obj)/qconf.o: $(obj)/qconf.moc
>
> quiet_cmd_moc = MOC $@
> - cmd_moc = $(call read-file, $(obj)/qconf-bin)/moc $< -o $@
> + cmd_moc = $(call read-file, $(obj)/qconf-bin)/moc -i $< -o $@
>
> -$(obj)/qconf-moc.cc: $(src)/qconf.h FORCE | $(obj)/qconf-bin
> +$(obj)/%.moc: $(src)/%.h FORCE | $(obj)/qconf-bin
> $(call if_changed,moc)
>
> -targets += qconf-moc.cc
> +targets += qconf.moc
>
> # gconf: Used for the gconfig target based on GTK+
> hostprogs += gconf
> diff --git a/scripts/kconfig/qconf.cc b/scripts/kconfig/qconf.cc
> index c6c42c0f4e5d..283b427f4321 100644
> --- a/scripts/kconfig/qconf.cc
> +++ b/scripts/kconfig/qconf.cc
> @@ -25,6 +25,7 @@
> #include "lkc.h"
> #include "qconf.h"
>
> +#include "qconf.moc"
> #include "images.h"
>
>
> I don't think this is the proper solution, but at least it works. I hope you
> find a better way to fix this.
>
> Regards,
>
> Eike
> --
> Rolf Eike Beer
>
> emlix GmbH
> Headquarters: Berliner Str. 12, 37073 Göttingen, Germany
> Phone +49 (0)551 30664-0, e-mail info@emlix.com
> District Court of Göttingen, Registry Number HR B 3160
> Managing Directors: Heike Jordan, Dr. Uwe Kracke
> VAT ID No. DE 205 198 055
> Office Berlin: Panoramastr. 1, 10178 Berlin, Germany
> Office Bonn: Bachstr. 6, 53115 Bonn, Germany
> http://www.emlix.com
>
> emlix - your embedded Linux partner
--
Nicolas Schier
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-06-24 11:10 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-24 8:56 "make xconfig" fails with "No rule to make target …/qconf-moc.cc …" Rolf Eike Beer
2024-06-24 11:04 ` Nicolas Schier
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox