Como posso incluir modelo IBM XLC * arquivos .c no arquivo de dependência make?

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

  •  05-07-2019
  •  | 
  •  

Pergunta

Para o compilador XLC, código templated vai em um arquivo .c *. Em seguida, quando o programa é compilado que usa as funções de modelo, o compilador encontra os definisions modelos no ficheiro .c e instancia-los.

O problema é que esses arquivos .c não são por padrão incluído ao fazer um xlC -qmakedepend para gerar as dependências de construção. Então, se você mudar um desses arquivos .c, você não vai automaticamente construir tudo o que depende dela.

Alguém já encontrou uma boa solução para este problema?

Foi útil?

Solução

Em suma, a resposta é migrar fora de usar utilidade tempinc do XLC.

O utilitário tempinc requer que você configure seus arquivos com as declarações de modelo no seu cabeçalho (.h ou .hpp) arquivo e suas implementações em um arquivo .c (esta extensão é obrigatório). Como o compilador encontra instâncias de modelo, ele vai colocar instantiations explícitas em um outro arquivo de origem em seu diretório tempinc, forçando código a ser gerado por eles. O compilador sabe para encontrar as definições de modelo declered em foo.h em foo.c.

O problema que eu especificado é que os construtores de dependência não sei sobre isso, e, portanto, não pode incluir seus arquivos .c nas dependências.

Com a Versão 6.0 IBM recomenda o uso de um a configuração em vez de -qtempinc -qtemplateregistry. Então, você pode usar um modelo típico configurado de incluir as definições de modelo em seu arquivo de cabeçalho, que será visível para o localizador de dependência, ou colocá-los em um arquivo separado que você # include do seu arquivo de cabeçalho, e também será encontrado usando o localizador de dependência.

Se você estiver migrando de usar -qtempinc, você pode condicionalmente #include seu arquivo de implementação do modelo de seu arquivo declaração com um código como abaixo:

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

Assim, seu código irá construir e link, se você decidir que quer voltar a usar a configuração -qtempic.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top