Re: [CMake] Double Substitution in IF Statement
Hi Aaron, If I run your script (using CMake 2.6.2) I get -- CONTAINS_LIB = TRUE as output. Isn't that what you expected? If not, then I'm missing the point of your macro LIST_CONTAINS. What version of CMake are you using? Best regards, Marcel Loose. On Wed, 2009-11-18 at 09:54 -0800, aaron_wri...@selinc.com wrote: I have a little question about how to prevent double substitution in an IF statement. Consider this macro that looks through a list for a string, and sets a variable to TRUE if it is found. The problem I have is that the IF statement substitutes ${VALUE2} with LIB, and then substitutes LIB with HELLO, and finds what it's looking for, even though it wasn't really there. I want it to stop at the first substitution to prevent this weird behavior. Ideas? MACRO(LIST_CONTAINS VAR VALUE) SET(${VAR}) FOREACH(VALUE2 ${ARGN}) IF(${VALUE} STREQUAL ${VALUE2}) SET(${VAR} TRUE) ENDIF() ENDFOREACH() ENDMACRO() SET(LIB HELLO) SET(LIBS LIB IS GREAT) LIST_CONTAINS(CONTAINS_LIB ${LIB} ${LIBS}) MESSAGE(STATUS CONTAINS_LIB = ${CONTAINS_LIB}) - Aaron Wright Software Engineer - DCS Group Schweitzer Engineering Laboratories, Inc. Pullman, WA 99163 509-334-8087 ___ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake ___ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake
Re: [CMake] Double Substitution in IF Statement
No, it should be empty because he wants to test whether HELLO is in LIBS. But inside the IF statement, the ${VALUE} that evaluates to LIB (a member of LIBS) gets then expanded again to HELLO. Quite funny actually. However, reading the manpage closely only the left-hand value of STREQUAL gets expanded, so reversing the statement solves the problem. Michael On 19. Nov, 2009, at 9:40 , Marcel Loose wrote: Hi Aaron, If I run your script (using CMake 2.6.2) I get -- CONTAINS_LIB = TRUE as output. Isn't that what you expected? If not, then I'm missing the point of your macro LIST_CONTAINS. What version of CMake are you using? Best regards, Marcel Loose. On Wed, 2009-11-18 at 09:54 -0800, aaron_wri...@selinc.com wrote: I have a little question about how to prevent double substitution in an IF statement. Consider this macro that looks through a list for a string, and sets a variable to TRUE if it is found. The problem I have is that the IF statement substitutes ${VALUE2} with LIB, and then substitutes LIB with HELLO, and finds what it's looking for, even though it wasn't really there. I want it to stop at the first substitution to prevent this weird behavior. Ideas? MACRO(LIST_CONTAINS VAR VALUE) SET(${VAR}) FOREACH(VALUE2 ${ARGN}) IF(${VALUE} STREQUAL ${VALUE2}) SET(${VAR} TRUE) ENDIF() ENDFOREACH() ENDMACRO() SET(LIB HELLO) SET(LIBS LIB IS GREAT) LIST_CONTAINS(CONTAINS_LIB ${LIB} ${LIBS}) MESSAGE(STATUS CONTAINS_LIB = ${CONTAINS_LIB}) - Aaron Wright Software Engineer - DCS Group Schweitzer Engineering Laboratories, Inc. Pullman, WA 99163 509-334-8087 ___ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake ___ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake ___ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake
[CMake] Double Substitution in IF Statement
I have a little question about how to prevent double substitution in an IF statement. Consider this macro that looks through a list for a string, and sets a variable to TRUE if it is found. The problem I have is that the IF statement substitutes ${VALUE2} with LIB, and then substitutes LIB with HELLO, and finds what it's looking for, even though it wasn't really there. I want it to stop at the first substitution to prevent this weird behavior. Ideas? MACRO(LIST_CONTAINS VAR VALUE) SET(${VAR}) FOREACH(VALUE2 ${ARGN}) IF(${VALUE} STREQUAL ${VALUE2}) SET(${VAR} TRUE) ENDIF() ENDFOREACH() ENDMACRO() SET(LIB HELLO) SET(LIBS LIB IS GREAT) LIST_CONTAINS(CONTAINS_LIB ${LIB} ${LIBS}) MESSAGE(STATUS CONTAINS_LIB = ${CONTAINS_LIB}) - Aaron Wright Software Engineer - DCS Group Schweitzer Engineering Laboratories, Inc. Pullman, WA 99163 509-334-8087___ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake