Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get error for "make: Nothing to be done for 'target'"

Let me illustrate it with an example.

mkdir test
cd test
touch target
make target

This will result in: make: Nothing to be done for 'target'.

So make tells me there is nothing to do. This is because make did not find a rule to make target, but because the target already exists make tells me there is nothing to do.

Now, I don't want that. I want make to give me an error when it cannot find a rule for target, even though the target already exists.

I have tried the following:

echo '.DEFAULT:
        echo make: *** No rule to make target `$@'.  Stop.
        false'> Makefile

But this does not stop the make when making multiple targets.

like image 926
To1ne Avatar asked Oct 16 '25 04:10

To1ne


2 Answers

The problem is, that make assumes the target name is also a file which will be build by the given commands.

But sometimes this is not true (e.g. think of "clean"). To tell make that some targets don't build this file, you need to make them "phony". Put the following line into your Makefile:

.PHONY: target
like image 193
bb-generation Avatar answered Oct 18 '25 23:10

bb-generation


If you think about it, you would end up with a chicken-and-egg situation (or infinite regress). Suppose you managed to have a rule that said 'You must have a rule to create target before it is legitimate', then you'd have a rule that says 'target depends on X' for some other file X. That's written:

target: X
        command to build target from X

But then you'd be back to the starting point: you'd also want a rule to create X. How can you do that? You might have a rule that depends on nothing and magically creates the file X when it is needed:

X:
        command to build X from nothing

Without a rule like that, you have an infinite regress.

So, make is designed to ensure that files exist and are up to date. If a file exists and there are no rules - implicit or explicit - to specify how it is made, then the file is up to date. What you are seeking to do is not possible.

like image 20
Jonathan Leffler Avatar answered Oct 18 '25 22:10

Jonathan Leffler



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!