4 ms·
I have been unclear in my formulation, sorry. The problem is a target with more than one output files, that target would look something like, which does work
by ReleaseCandidat 2y ago
I have been unclear in my formulation, sorry.
The problem is a target with more than one output files, that target would look something like, which does work
foo bar: baz
compile $< -o foo -o bar
but as this is the same as writing
foo: baz
compile $< -o foo -o bar
bar: baz
compile $< -o foo -o bar
to generate `foo` and `bar` the rule is run twice in a parallel build (`make -j 2`. Which may just be unnecessary or it may break the whole build.
- robinsonb5 2y agoSo can that be solved like this, or is there some other subtlety I'm missing? foo: baz compile $< -o foo -o bar bar: foo (Can someone tell me how to do code tags on HN please? :) Edit: fixed now, thanks!)
- oneeyedpigeon 2y ago> Text after a blank line that is indented by two or more spaces is reproduced verbatim. (This is intended for code.) (from https://news.ycombinator.com/formatdoc https://news.ycombinator.com/formatdoc)
- mauvehaus 2y agoAmong other things, now you have to maintain a set of dummy targets. If you have a variable (possibly generated) that is basically A_MESS_OF_FILES := foo bar zot You now have to create dummy targets for bar, baz, and zot and not forget to add them. Or maybe break it into MAIN_FILE := foo SUBORDINATE_FILES := bar zot foo: baz sudo make me a foo $(SUBORDINATE_FILES): %: foo
- ReleaseCandidat 2y agoSubtlety. Now the dependencies are `baz` -> `foo` -> `bar`, that is `foo` is a temporary target and won't be (re)build if `bar` already exists. Which may or may not be a problem. This temporary target (whatever the actual term is) can be "elevated" to a "normal" target with the use of some special target (which I'm too lazy to look up right now).
- frumiousirc 2y agohttps://www.gnu.org/software/make/manual/html_node/Multiple-Targets.html https://www.gnu.org/software/make/manual/html_node/Multiple-... Scroll down to "Grouped targets". I think these address the concern you raise. The snippet you have shown is an example of the "independent targets" pattern which the first half of that page also covers.
- ReleaseCandidat 2y agoThanks, that's it. It has been introduced with GNU Make 4.3, January 2020 https://lists.gnu.org/archive/html/info-gnu/2020-01/msg00004.html https://lists.gnu.org/archive/html/info-gnu/2020-01/msg00004...