Re: Compacting link-rules
Paul Smith wrote: All the .obj files are missing!? Oh. $@ is "bin/animation.exe" so $(@F) is "animation.exe" and $($(@F)_OBJ) would be "animation.exe_OBJ" but that's not the name of your variable, so it expands to the empty string. Sorry I didn't catch this problem in your original suggestion. You want: bin/%.exe: $$($$*_OBJ) $(LIBS) ... because $* matches the pattern stem, which is "animation" in this case. That seems to work fine. Thanks a lot! -- --gv ___ Bug-make mailing list Bug-make@gnu.org https://lists.gnu.org/mailman/listinfo/bug-make
Re: Compacting link-rules
On Thu, 2018-10-18 at 18:32 +0200, Gisle Vanem wrote: > > .SECONDEXPANSION: > > bin/%.exe: $$($$(@F)_OBJ) $(LIBS) > $(call link_EXE, $@, $^) > > Very compact and nice. But trying it, it wont work. > For 'bin/animation.exe', it expands to: > bin/animation.exe: $(LIBS) > link -nologo -debug -incremental:no -map -subsystem:windows > -out:bin/controls.exe lib/Qwt.lib ... > > All the .obj files are missing!? Oh. $@ is "bin/animation.exe" so $(@F) is "animation.exe" and $($(@F)_OBJ) would be "animation.exe_OBJ" but that's not the name of your variable, so it expands to the empty string. Sorry I didn't catch this problem in your original suggestion. You want: bin/%.exe: $$($$*_OBJ) $(LIBS) ... because $* matches the pattern stem, which is "animation" in this case. ___ Bug-make mailing list Bug-make@gnu.org https://lists.gnu.org/mailman/listinfo/bug-make
Re: Compacting link-rules
Paul Smith wrote: Or, you can enable secondary expansion which will allow you to write: .SECONDEXPANSION: bin/%.exe: $$($$(@F)_OBJ) $(LIBS) $(call link_EXE, $@, $^) Very compact and nice. But trying it, it wont work. For 'bin/animation.exe', it expands to: bin/animation.exe: $(LIBS) link -nologo -debug -incremental:no -map -subsystem:windows -out:bin/controls.exe lib/Qwt.lib ... All the .obj files are missing!? Trying a: .SECONDEXPANSION: $(animation_OBJ) does not make a difference. Also a 'make -p' show: bin/animation.exe: lib/Qwt.lib and nothing else. Qwt.lib is part of $(LIBS). -- --gv ___ Bug-make mailing list Bug-make@gnu.org https://lists.gnu.org/mailman/listinfo/bug-make
Re: Compacting link-rules
On Thu, 2018-10-18 at 17:40 +0200, Gisle Vanem wrote: >bin/%.exe: $($(@F)_OBJ) $(LIBS) >$(call link_EXE, $@, $^) This cannot work because automatic variables like $@, etc. are only valid _inside a recipe_. They are not set and cannot be used in target or prerequisite lists: they expand to the empty string. You have two choices. You can either separate the prerequisites from the recipe, like this: bin/%.exe: $(call link_EXE,$@,$^) bin/animation.exe: $(animation_OBJ) $(LIBS) bin/barchart.exe: $(barchart_OBJ) $(LIBS) Or, you can enable secondary expansion which will allow you to write: .SECONDEXPANSION: bin/%.exe: $$($$(@F)_OBJ) $(LIBS) $(call link_EXE, $@, $^) (note the extra "$" in the variable references. See: https://www.gnu.org/software/make/manual/make.html#Secondary-Expansion ___ Bug-make mailing list Bug-make@gnu.org https://lists.gnu.org/mailman/listinfo/bug-make
Compacting link-rules
Hello list. I need help with compacting a series of rules like (from a Qwt makefile): animation_OBJ = examples/animation/main.obj \ examples/animation/plot.obj barchart_OBJ = examples/barchart/barchart.obj \ examples/barchart/main.obj \ examples/barchart/moc_barchart.obj bin/animation.exe: $(animation_OBJ) $(LIBS) $(call link_EXE, $@, $^) bin/barchart.exe: $(barchart_OBJ) $(LIBS) $(call link_EXE, $@, $^) ... plus a lot more into a more compact rule like: bin/%.exe: $($(@F)_OBJ) $(LIBS) $(call link_EXE, $@, $^) But I fail to get a correct param-2 for my link_EXE macro. What would be the correct syntax for this? (if at all possible). This is for MSVC/clang-cl. I'm on Windows-10 using GNU-make v 4.2.90. -- --gv ___ Bug-make mailing list Bug-make@gnu.org https://lists.gnu.org/mailman/listinfo/bug-make