[cmake-developers] Surprising CMP0054 behavior
Brad King
brad.king at kitware.com
Mon Mar 26 08:51:30 EDT 2018
On 03/26/2018 08:07 AM, Craig Scott wrote:
> Am I missing something, or is the following result surprising to others as well:
>
> set(somevar YES)
> if ("somevar")
> message("Get here if CMP0054 is OLD (seems okay)")
> else()
> message("Get here if CMP0054 is NEW (surprising?)")
> endif()
>
> I would have thought that even with CMP0054 being NEW, the if condition would
> still evaluate to true since it is going to test a non-empty string that
> doesn't match any of the defined false constants.
The observed behavior is consistent with the documentation.
`if(<constant>)` enumerates a set of true/false constants and says
that if it is not one of these then it uses `if(<variable|string>)`.
That is true only if it is a variable that is defined to a value that
is not a false constant. With CMP0054 NEW behavior, `if("string")`
is always treated as the *string* variant which is never a variable
defined to anything.
-Brad
More information about the cmake-developers
mailing list