¿Cómo incluyo los archivos * .c de la plantilla XLC de IBM en el archivo de dependencia?

StackOverflow https://stackoverflow.com/questions/168938

  •  05-07-2019
  •  | 
  •  

Pregunta

Para el compilador XLC, el código con plantilla va en un archivo * .c. Luego, cuando se compila el programa que utiliza las funciones de plantilla, el compilador encuentra las definiciones de la plantilla en el archivo .c y las crea una instancia.

El problema es que estos archivos .c no se incluyen de forma predeterminada cuando se realiza una xlC -qmakedepend para generar las dependencias de compilación. Por lo tanto, si cambia uno de esos archivos .c, no generará automáticamente todo lo que depende de él.

¿Alguien ha encontrado una buena solución a este problema?

¿Fue útil?

Solución

En resumen, la respuesta es migrar usando la utilidad tempinc de XLC.

La utilidad tempinc requiere que configure sus archivos con las declaraciones de plantilla en su archivo de encabezado (.h o .hpp) y sus implementaciones en un archivo .c (esta extensión es obligatoria). A medida que el compilador encuentra instancias de plantilla, colocará ejemplificaciones explícitas en otro archivo fuente en su directorio tempinc, lo que obligará a generar un código para ellas. El compilador sabe que debe encontrar las definiciones de plantilla en foo.h en foo.c.

El problema que especifiqué es que los constructores de dependencias no lo saben y, por lo tanto, no pueden incluir sus archivos .c en las dependencias.

Con la versión 6.0 IBM recomienda usar un la configuración de -qtemplateregistry en lugar de -qtempinc. Luego, puede usar una configuración de plantilla típica que incluya las definiciones de plantilla en su archivo de encabezado, que luego estará visible para el buscador de dependencias, o ubicándolas en un archivo separado que usted #include de su archivo de encabezado, y también encontrado utilizando el buscador de dependencias.

Si está migrando de usar -qtempinc, puede condicionalmente #incluir el archivo de implementación de su plantilla desde su archivo de declaración con el siguiente código:

// end of foo.h
#ifndef __TEMPINC__          
#include "foo.c"       
#endif       

Por lo tanto, su código se generará y se vinculará si alguna vez decide volver a usar la configuración -qtempic.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top