CMake的STREQUAL无法正常工作

voi*_*ter 18 cmake

根据CMake文档,STREQUAL允许比较采用VARIABLE或STRING作为参数.因此,在下面的示例中,消息不会打印,这是打破的:

set( FUBARTEST "OK" )
if( FUBARTEST STREQUAL "OK" )
    message( "It Worked" )
endif()
Run Code Online (Sandbox Code Playgroud)

有什么理由说这不符合记录?

voi*_*ter 28

问题是我的缓存.我删除了我的缓存并重新配置,现在代码工作.

  • 不知道为什么你被贬低 - 当CMake行为奇怪时,这通常是一个有效的解决方案. (10认同)

Ria*_*son 15

我最初没有测试你的例子,但是当我这样做时,我看到你的代码在cmake 2.8.0上正常工作,而且在文档中公布的其他组合也是如此:

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()
Run Code Online (Sandbox Code Playgroud)

给出输出:

FUBARTEST Worked
string STREQUAL string works
variable STREQUAL variable works
variable STREQUAL string works
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的测试,但这显然是一个缓存问题:( (3认同)