tipos que proyecto indicadores indicador gestion ejemplos desempeño cómo construir construccion cmake

que - ¿Cuál es el método moderno para establecer indicadores de compilación generales en CMake?



tipos de indicadores (1)

Para CMake moderno (versiones 2.8.12 y posteriores) debe usar target_compile_options , que usa propiedades de destino internamente.

CMAKE_<LANG>_FLAGS es una variable global y la más propensa a errores. Tampoco es compatible con expresiones de generador , que pueden ser muy útiles.

add_compile_options se basa en las propiedades del directorio, lo que está bien en algunas situaciones, pero generalmente no es la manera más natural de especificar opciones.

target_compile_options funciona por destino (mediante la configuración de las propiedades de destino COMPILE_OPTIONS e INTERFACE_COMPILE_OPTIONS ), que generalmente resulta en el código de CMake más limpio, ya que las opciones de compilación para un archivo fuente están determinadas por el proyecto al que pertenece el archivo (en lugar del directorio se coloca en el disco duro). Esto tiene la ventaja adicional de que automáticamente se ocupa de pasar opciones a objetivos dependientes si así lo solicita.

A pesar de que son un poco más detallados, los comandos por objetivo permiten un control razonablemente detallado sobre las diferentes opciones de compilación y (en mi experiencia personal) son los menos propensos a causar dolores de cabeza a largo plazo.

En teoría, también podría establecer las propiedades respectivas directamente usando set_target_properties , pero target_compile_options suele ser más legible.

Por ejemplo, para establecer las opciones de compilación de un foo objetivo basado en la configuración utilizando expresiones generadoras, puede escribir:

target_compile_options(foo PUBLIC "$<$<CONFIG:DEBUG>:${MY_DEBUG_OPTIONS}>") target_compile_options(foo PUBLIC "$<$<CONFIG:RELEASE>:${MY_RELEASE_OPTIONS}>")

Hay múltiples mecanismos ofrecidos por CMake para obtener indicadores para el compilador:

¿Hay algún método preferido sobre el otro en el uso moderno? Si es así, ¿por qué? Además, ¿cómo se puede utilizar este método con múltiples sistemas de configuración como MSVC?