[CMake] set(a b); set(b c); if(a STREQUAL b OR a STREQUAL c) ...
Ruslan Baratov
ruslan_baratov at yahoo.com
Fri Sep 5 07:19:31 EDT 2014
On 04-Sep-14 20:40, Hendrik Sattler wrote:
>
> On 4. September 2014 16:38:21 MESZ, Ruslan Baratov via CMake <cmake at cmake.org> wrote:
>> On 04-Sep-14 18:09, Anders Lindgren wrote:
>>> make sure that the argument don't form a valid variable name.
>> It's not possible
>>
>>> set(a b)
>>> set(b c)
>>> if(">${a}<" STREQUAL ">b<" OR ">${a}<" STREQUAL ">c<")
>>> message("true")
>>> endif()
>> How about that:
>>
>> set(a "") # variable `a` is empty
>> set("><" ">b<")
>>
>> if(">${a}<" STREQUAL ">b<")
>> message("Value of variable with name `a` is `b`!")
>> endif()
> I really do not understand this argument.
> Do you have so little control over your build tool (and that's what CMake is)?
> Nobody makes variables like this. Maybe to break the build script on purpose. And then, it breaks, so what?
>
> HS
>
The solution ">...<" not changing the reason of the problem - ambiguity.
It's just making things more obscure. My example prove that statement
"make sure that the argument don't form a valid variable name" by
creating string ">...<" is wrong. Here is example of how "strange" names
can appear:
# User's code
macro(set_version package component version)
set("${package}-${CMAKE_DEBUG_POSTFIX}_${component}" "${version}")
endmacro()
set(CMAKE_DEBUG_POSTFIX d)
if(Somepackage_FOUND)
set(pack_name "Somepackage")
set(pack_component "Somecomp")
set(pack_version "1.2.3")
else()
set(pack_name "")
set(pack_component "")
set(pack_version "")
endif()
set_version("${pack_name}" "${component}" "${version}")
find_package(...) # User call my code here
If package not found the variable "-d_" is defined and empty. Some user
choose "-" and "_", the other choose ">" and "<". I don't want to
blame/teach *users* for creating such names. The important thing is that
it will not ruin my code.
Cheers, Ruslo
More information about the CMake
mailing list