2010-07-22 5 views
9

Necesitaba reemplazar un valor en una lista de CMake, sin embargo, no parece haber ningún soporte para esta operación de lista.Reemplazo de valores en listas de CMake

Yo he llegado con este código:

macro (LIST_REPLACE LIST INDEX NEWVALUE) 
    list (REMOVE_AT ${LIST} ${INDEX}) 
    list (LENGTH ${LIST} __length) 

    # Cannot insert at the end 
    if (${__length} EQUAL ${INDEX}) 
     list (APPEND ${LIST} ${NEWVALUE}) 
    else (${__length} EQUAL ${INDEX}) 
     list (INSERT ${LIST} ${INDEX} ${NEWVALUE}) 
    endif (${__length} EQUAL ${INDEX}) 
endmacro (LIST_REPLACE) 

# Example 
set (fubar A;B;C) 
LIST_REPLACE (fubar 2 "X") 
message (STATUS ${fubar}) 

¿Tiene usted alguna idea mejor forma de lograr eso?

Respuesta

12

No es necesario el registro de entrada if:

project(test) 
cmake_minimum_required(VERSION 2.8) 

macro(LIST_REPLACE LIST INDEX NEWVALUE) 
    list(INSERT ${LIST} ${INDEX} ${NEWVALUE}) 
    MATH(EXPR __INDEX "${INDEX} + 1") 
    list (REMOVE_AT ${LIST} ${__INDEX}) 
endmacro(LIST_REPLACE) 

set(my_list A B C) 
LIST_REPLACE(my_list 0 "FIRST") 
LIST_REPLACE(my_list 1 "SECOND") 
LIST_REPLACE(my_list 2 "THIRD") 
message (STATUS "NEW LIST: ${my_list}") 
Cuestiones relacionadas