*
Make simply reported an undefined variable

For me, it was treated as an assignment:

martind@stormy:~/tmp/jerome-2025-07-28$ cat Makefile
CXX == g++
martind@stormy:~/tmp/jerome-2025-07-28$ make -p 2>&1 | grep ^CXX
CXX = = g++
martind@stormy:~/tmp/jerome-2025-07-28$

... so the variable being undefined seems like an additional puzzle.


  *
`==` is encountered in a context that ... isn’t a conditional test?

Make doesn't use == for conditional tests.

https://www.gnu.org/software/make/manual/html_node/Setting.html

... suggests it does have, yie ai ai, four different assignment operators, 
though there's a fifth at:

https://www.gnu.org/software/make/manual/html_node/Conditional-Assignment.html

You could try adding a warning if unexpected punctuation is adjacent to the 
equals sign, but I bet it'd go off on some real makefiles that don't put spaces 
around the assignment operators.  If you were to only fire off the warning when 
there's a space before the assignment, then maybe the false positives would be 
rare enough to be acceptable.

________________________________
From: bug-make-bounces+martin.dorey=hds....@gnu.org 
<bug-make-bounces+martin.dorey=hds....@gnu.org> on behalf of Jerome 
Saint-Martin <jerome.saint-mar...@outlook.fr>
Sent: Monday, July 28, 2025 01:59
To: bug-make@gnu.org <bug-make@gnu.org>
Subject: Suggestion : warining when using == instead of = in a Makefile 
variable assignation

***** EXTERNAL EMAIL *****
Hello GNU Make team,

    Recently, I spent quite some time debugging a Makefile issue, only to 
realize that I had mistakenly written `==` instead of `=` when assigning a 
variable (e.g., `CXX == g++` instead of `CXX = g++`). Make simply reported an 
undefined variable later on, which made the root cause harder to spot.

    This kind of mistake is easy to make, especially for C++ developers who are 
used to writing `==` in conditionals. In C++, compilers like GCC emit warnings 
such as “value computed is not used” when an expression like `x == y;` is 
written outside a conditional context.

    Would it be feasible for GNU Make to emit a warning when `==` is 
encountered in a context that looks like a variable assignment, but isn’t a 
conditional test? I believe this could help many users catch such typos early.

    Thanks for considering this suggestion, and thank you for your work on Make!

Best regards,
Jerome

Reply via email to