Замена значений в списках 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})

У Вас есть какая-либо лучшая идея, как достигнуть этого?

9
задан Přemysl J. 22 July 2010 в 10:18
поделиться

1 ответ

Вам не нужен if check:

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}")
14
ответ дан 4 December 2019 в 14:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: