2010-07-22 48 views
9

我需要替換CMake列表中的值,但似乎沒有任何支持此列表操作。替換CMake列表中的值

我想出這個代碼:

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}) 

你有什麼更好的想法如何實現這一目標?

回答

12

你不需要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}")