Quiero crear una macro cuyo argumento sea opcional. Si no se especifica, el valor del argumento debe ser una cadena vacía. ¿Cómo puedo hacer esto? Gracias por tu ayuda.Argumento opcional en la macro cmake
Respuesta
CMake no (AFAIK) verifica el número de variables pasadas a una macro, por lo que puede continuar y declararlo como cualquier otra macro.
También hay una variable ${ARGN}
que se expande a una lista de todas las variables "restantes" pasadas a una macro, que pueden ser útiles.
actualización Como se indica en Sam 's comment, CMake ahora falla a menos que todos (con nombre) argumentos esperados se dan cuando se llama a una macro o función.
Esto ocurre de manera predeterminada si el argumento no se especifica como CMake no comprueba el número de parámetros requeridos para una macro.
Se requieren todos los argumentos nombrados en la definición de macro para las personas que llaman. Sin embargo, su macro aún puede aceptar argumentos opcionales siempre que no se mencionen explícitamente en la definición de la macro.
Es decir, las personas que llaman pueden pasar argumentos adicionales (que no se mencionaron en la lista de argumentos de la macro). Su macro puede verificar la existencia de tales argumentos adicionales al verificar la variable ${ARGN}
.
Cuidado: ARGN
no es una variable cmake "normal". Para utilizarlo con el comando list()
, tendrá que copiar en una variable normal en primer lugar:
macro (mymacro required_arg1 required_arg2)
# Cannot use ARGN directly with list() command,
# so copy it to a variable first.
set (extra_macro_args ${ARGN})
# Did we get any optional args?
list(LENGTH extra_macro_args num_extra_args)
if (${num_extra_args} GREATER 0)
list(GET extra_macro_args 0 optional_arg)
message ("Got an optional arg: ${optional_arg}")
endif()
endmacro (mymacro)
- 1. Agregando un argumento opcional a la macro
- 2. Primero argumento opcional en JavaScript
- 3. extraño "Argumento no opcional" error en VBA
- 4. C macro argumento de 'almacenamiento'
- 5. Cómo agregar la definición de macro en cmake?
- 6. Argumento opcional en la implementación de Drupal hook_menu
- 7. python argparse - opcional anexar argumento con elecciones
- 8. El argumento opcional no se puede borrar?
- 9. Argumento opcional seguido de los parámetros
- 10. gama Pases literal como argumento macro
- 11. Defina una clase con argumento opcional en Python
- 12. ¿Cómo marcar que un argumento es opcional en PHPDoc?
- 13. Cómo crear un diccionario vacío para argumento opcional en VB.NET
- 14. ¿Es posible que un valor de argumento opcional que depende de otro argumento en Scala
- 15. ¿Cómo se cita un argumento en una macro?
- 16. ¿Cómo creo un DateFormat con un argumento de tiempo opcional?
- 17. Palabra clave de Clojure y argumento opcional Problema
- 18. Escribir un script de Fish Shell con un argumento opcional
- 19. Cierre de PHP como argumento de función opcional
- 20. ¿Cómo utilizar el argumento de macro como cadena literal?
- 21. Argumento macro de Concat con espacio de nombres
- 22. RavenDB - Opcional en la cláusula
- 23. ¿Cómo definir una macro de preprocesador C++ a través de la línea de comando con CMake?
- 24. ¿Cómo puedo hacer un argumento opcional en mi función personalizada en PHP?
- 25. CMake ... ccmake or cmake?
- 26. ¿Es opcional la opción EndInvoke(), opcional o definitivamente no es opcional?
- 27. El código de argumento opcional se compila en .NET 3.5. ¿Por qué?
- 28. ¿Cómo puedo usar un argumento de matriz opcional en un procedimiento de VBA?
- 29. Cómo decidir si un argumento opcional se dio o no en un método de ruby
- 30. Cambiar el caso de argumento proporcionado a la macro del preprocesador C
Ahora sí parece cmake para comprobar si se pasan muy pocas variables. Esta respuesta ahora parece estar equivocada, o al menos está en mi cmake 2.8.8 – Sam
Su macro aún puede tener "argumentos" opcionales, siempre y cuando no estén nombrados en la definición de la macro. Es decir, las personas que llaman pueden pasar argumentos adicionales que no fueron nombrados en la lista de argumentos de la macro. Su macro puede verificar estos argumentos adicionales usando '$ {ARGN}'. Cuidado: ARGN no es una variable cmake "normal". Para usarlo con el comando list(), primero deberá copiarlo en una variable normal: 'set (extra_macro_args $ {ARGN})'. Entonces puedes hacer cosas como 'list (LENGTH extra_macro_args num_extra_args)' seguido de 'if ($ {num_extra_args} MAYOR 0) yadayadayada' –