Como é que se adicionar um passo de compilação personalizado a um projeto baseado automake no KDevelop?

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

  •  01-07-2019
  •  | 
  •  

Pergunta

Eu recentemente comecei a trabalhar em um projeto de codificação pessoal usando C ++ e KDevelop. Embora Comecei por apenas cortando ao redor, eu acho que vai ser melhor no longo prazo, se eu criar um conjunto de testes de unidade adequada antes de ir muito mais longe. Eu criei um executável test-corredor separado como um projeto sub, e os testes que eu adicionei a ele pareceu funcionar adequadamente. Até agora, o sucesso.

No entanto, eu realmente gostaria de obter os meus testes unitários correndo cada vez que eu construir, não só quando eu executá-los explicitamente. Isto será especialmente verdade como eu dividir a bagunça que eu fiz em bibliotecas de conveniência, cada um dos quais provavelmente terá seu próprio executável teste. Ao invés de todos eles executados à mão, eu gostaria de levá-los para executar como o último passo no meu processo de criação. Eu olhei através de todas as opções no menu projeto e o gerente automake, mas eu não consigo descobrir como configurar isso.

Eu imagino que isso provavelmente poderia ser feito editando o makefile com a mão. Infelizmente, meu makefile-fu é um pouco fraco, e eu também tenho medo que o KDevelop pode substituir quaisquer alterações que faço com a mão na próxima vez que eu mudar alguma coisa através do IDE. Portanto, se há uma opção sobre como fazer isso através do próprio KDevelop, eu prefiro muito mais ir por esse caminho.

Alguém sabe como eu poderia começar KDevelop para executar meus executáveis ??teste como parte do processo de criação? Obrigado!

(Não estou 100% ligada a KDevelop. Se KDevelop não pode fazer isso, ou então se há um IDE que faz isso muito mais fácil, eu poderia ser convencido a chave.)

Foi útil?

Solução

Embora você pode manipular o padrão `alvo make` para executar os testes, que geralmente não é recomendado, porque cada invocação de

make

iria executar todos os testes. Você deve usar o "cheque" alvo em vez disso, que é um quase-padrão aceito entre pacotes de software. Ao fazer isso, os testes só são iniciadas quando você executar

make check

Você pode facilmente configurar KDevelop para executar "cheque make" em vez de apenas "make".

Desde que você está usando automake (através KDevelop), você não precisa escrever o "exame" target si mesmo. Em vez disso, basta editar o seu `Makefile.am` e definir algumas variáveis:

TESTS = ...

Tenha um olhar para o automake documentação, "Suporte para conjuntos de teste" para mais informações.

Outras dicas

Eu tenho que trabalhar desta maneira:

$ cat src/base64.c
//code to be tested
int encode64(...) { ... }

#ifdef UNITTEST
#include <assert.h>
int main(int argc, char* argv[])
{
  assert( encode64(...) == 0 );
  return 0;
}
#endif //UNITTEST
/* end file.c */

$ cat src/Makefile.am
...
check_PROGRAMS = base64-test
base64_test_SOURCES = base64.c
base64_test_CPPFLAGS = -I../include -DUNITTEST
TESTS = base64-test

A verificação make iria construir src / base64-teste e executá-lo:

$ make check
...
PASS: base64-test
==================
All 1 tests passed
==================
...

Agora eu estou tentando encapsular tudo como uma macro m4 para ser usado como este:

MAKE_UNITTEST(base64.c)

que deve produzir algo como a solução acima.

Espero que isso ajude.

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