Hello, When calling a macro, the variables can be dereferenced but they are not DEFINED, and the list() command fails in several way (please have a look at the attached test for more details)
Is this a wanted behaviour? If it is, perhaps it should be documented in macro() command documentation. Cheers, Daniele
macro(foo _bar) message(STATUS "_bar = ${_bar}") if(NOT DEFINED _bar) message("_bar NOT DEFINED") endif() list(LENGTH _bar _bar_len) if(NOT _bar_len EQUAL 2) message("_bar LENGTH = ${_bar_len}") endif() list(FIND _bar "hey" _bar_hey_index) if(NOT _bar_hey_index EQUAL 0) message("_bar_hey_index = ${_bar_hey_index}") endif() set(_count1 0) foreach(_i ${_bar}) message(STATUS "foreach 1: ${_count1}: ${_i}") math(EXPR _count1 "${_count1} + 1") endforeach() if(NOT ${_count1} EQUAL 2) message("_count1 = ${_count1}") endif() set(_count2 0) foreach(_i IN LISTS _bar) message(STATUS "foreach 2: ${_count2}: ${_i}") math(EXPR _count2 "${_count2} + 1") endforeach() if(NOT ${_count2} EQUAL 2) message("_count2 = ${_count2}") endif() endmacro() function(boo _bar) message(STATUS "_bar = ${_bar}") if(NOT DEFINED _bar) message("_bar NOT DEFINED") endif() list(LENGTH _bar _bar_len) if(NOT _bar_len EQUAL 2) message("_bar LENGTH = ${_bar_len}") endif() list(FIND _bar "hey" _bar_hey_index) if(NOT _bar_hey_index EQUAL 0) message("_bar_hey_index = ${_bar_hey_index}") endif() set(_count1 0) foreach(_i ${_bar}) message(STATUS "foreach 1: ${_count1}: ${_i}") math(EXPR _count1 "${_count1} + 1") endforeach() if(NOT ${_count1} EQUAL 2) message("_count1 = ${_count1}") endif() set(_count2 0) foreach(_i IN LISTS _bar) message(STATUS "foreach 2: ${_count2}: ${_i}") math(EXPR _count2 "${_count2} + 1") endforeach() if(NOT ${_count2} EQUAL 2) message("_count2 = ${_count2}") endif() endfunction() message(STATUS "----------------------\n") message(STATUS "Calling foo macro\n") foo("hey;you" "a;b") message(STATUS "----------------------\n") set(_bar "hey;hey2;hey3") message(STATUS "Calling foo macro (with _bar set to \"${_bar}\")\n") foo("hey;you" "a;b") message(STATUS "----------------------\n") message(STATUS "Calling boo function (OK)\n") boo("hey;you" "a;b")
-- 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://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers