listas CRealice son esencialmente cadenas separadas por punto y coma solo, pero si pasa una variable de este tipo a un comando, que se pone expanden en múltiples argumentos - por ejemplo,¿Cómo paso correctamente la lista de CMake (punto y coma y sep) de los indicadores a set_target_properties?
set(FLAGS f1 f2 f3)
# now FLAGS == 'f1;f2;f3'
add_custom_command(
...
COMMAND my_cmd ${FLAGS}
...
)
se llame correctamente my_cmd f1 f2 f3
.
si hago esto con
set_target_properties(
myTarget PROPERTIES
LINK_FLAGS "${LD_FLAGS}"
)
la expansión no se produce, y termino con un solo punto y coma que contiene LD_FLAG - inútil, en lugar de expandir en una cadena separada por espacios.
¿Hay alguna manera de hacerlo para que cuando paso una lista a la propiedad LINK_FLAGS (o cualquier propiedad que sea), se expanda en múltiples argumentos en lugar de solo uno?
Gracias, Dan
¿Es realmente la mejor manera? ¿Por qué CMake fue diseñado para usar un formato de lista que no es compatible con su propio comando 'set_target_properties'? –
El problema principal con esta técnica en general es que si alguno de los indicadores contiene espacios, causarán problemas. Deberá haber algún escape aplicado para conservar espacios en argumentos si es posible (por ejemplo, si se incluye un nombre de archivo proporcionado externamente, que puede contener espacios). –
B +++ T. No funciona 'string (REPLACE"; "" "DEST $ {SRC})' reemplaza el punto y coma con ... una cadena vacía. Solo esto funciona: 'foreach (OPT $ {LD_FLAGS}) set (LINK_FLAGS" $ {LINK_FLAGS} $ {OPT} ") endforeach()'. Sería realmente divertido, a menos que este C+++ p no fuera la herramienta de compilación más popular en la actualidad. – Ethouris