2011-10-06 9 views
13

De acuerdo con la documentación de CMake, la comparación STREQUAL puede tomar una VARIABLE o una STRING como cualquier parámetro. Por lo tanto, en este ejemplo a continuación, el mensaje NO se imprime, lo que está roto:CMake's STREQUAL no funciona

set(FUBARTEST "OK") 
if(FUBARTEST STREQUAL "OK") 
    message("It Worked") 
endif() 

¿Alguna razón por la que esto no funciona según lo documentado?

Respuesta

21

El problema era mi caché. Eliminé mi caché y lo reconfiguré, y ahora el código funciona.

+7

No estoy seguro de por qué estaba votando: esta suele ser una solución válida cuando CMake actúa de manera extraña. – Mark

11

no he probado el ejemplo al principio, pero cuando lo hice, veo su código funciona bien en cmake 2.8.0, y las otras combinaciones anunciados en la documentación también lo hacen:

set(FUBARTEST "OK") 
if(FUBARTEST STREQUAL "OK") 
    message("FUBARTEST Worked") 
else() 
    message("FUBARTEST FAILED") 
endif() 

set(FOO "OK") 
if(${FOO} STREQUAL "OK") 
    message("string STREQUAL string works") 
else() 
    message("string STREQUAL string FAILED") 

endif() 

set(FOO "OK") 
set(BAR "OK") 
if(FOO STREQUAL BAR) 
    message("variable STREQUAL variable works") 
else() 
    message("variable STREQUAL variable FAILED") 

endif() 

set(FOO "OK") 
if(FOO STREQUAL "OK") 
    message("variable STREQUAL string works") 
else() 
    message("variable STREQUAL string FAILED") 

endif() 

da salida:

FUBARTEST Worked 
string STREQUAL string works 
variable STREQUAL variable works 
variable STREQUAL string works 
+1

Gracias por probar, pero aparentemente era un problema de caché :( –