Gostaria de executar compilações diárias, ou fazer check-in / confirmar compilações acionadas de projetos baseados no Keil MDK-ARM. Até agora, resolvi tudo com o recurso de arquivo em lote do IDE. Isso exige que você construa o projeto pelo menos uma vez com o IDE, depois faça o check-in do arquivo em lotes e dos arquivos associados .__i
e ._ia
criados pelo IDE.
Além disso, o IDE coloca muitas coisas específicas do usuário no arquivo em lotes, como a variável PATH do Windows. Isso pode se tornar um problema para vários desenvolvedores, porque o arquivo em lotes para construção pode ser alterado em cada confirmação de um desenvolvedor diferente.
Por fim, basta acompanhar os vários switches para armcc , armasm e ArmLink .
Existe uma maneira de usar um makefile mais padrão para criar projetos Keil uVision? Existe um método de converter um arquivo de projeto do uVision em um script de construção mais sustentável?
Respostas:
Este é o melhor método que inventei recentemente:
Nas opções de construção, selecione criar arquivo em lote.
Quando você inicia uma compilação a partir do IDE, um arquivo em lotes e vários arquivos de texto são criados com base nas opções definidas no IDE. Você precisa acompanhar esses arquivos gerados pelo IDE no controle de origem:
Então foo.bat pode ser iniciado a partir de um script de construção.
Embora isso crie arquivos extras que precisam ser rastreados no controle de origem, se você deseja criar de forma confiável a partir do arquivo em lotes gerado, remove a necessidade de confiar no arquivo de projeto Keil (foo.uvproj) e no IDE. Acho mais fácil comparar diferenças e, assim, rastrear alterações nos arquivos de texto gerados (* .__i) que contêm sinalizadores de compilador do que no arquivo .uvproj. Além disso, o arquivo em lotes chama diretamente as várias ferramentas, armasm, armcc, armlink. Isso fornece a saída direta de cada uma dessas etapas, bem como um potencial aparentemente melhor para migrar um projeto para uma cadeia de ferramentas diferente no futuro, se necessário.
Percebo que essa resposta parece muito com a minha pergunta original, mas realmente não conheço uma maneira melhor de executar uma compilação com script com as ferramentas de Keil. Pedi para ver o que poderia surgir dos outros. Não discordo completamente da resposta de @digikata, mas prefiro ter sinalizadores de compilador e o mapa de memória em um formato mais fácil para rastrear e usar mais ferramentas de estilo unix para compilação, em vez de iniciar uma compilação tudo em um com o IDE. Acho que a compilação do multifuncional do IDE funciona bem na minha estação de trabalho, mas não no servidor de compilação.
EDIT : O servidor de compilação é executado no Windows Server 2003. Devo confessar que desisti de usar a interface da linha de comando IDE em vez de um arquivo em lotes. Isso se tornou muito difícil de gerenciar.
fonte
Eu chamo o Keil IDE via linha de comando para criar (não um arquivo em lotes gerado) de dentro de um Makefile. Geralmente, é melhor bloquear os arquivos do projeto por meio do scm ou fazer uma cópia de construção de referência renomeando os nomes relevantes do projeto ao fazer isso.
O IDE fica perfeitamente feliz em trabalhar com arquivos de projeto somente leitura, portanto, se você os bloquear, o mais irritante é que você precisará desbloqueá-los para alterar as configurações, salvar e fazer o check-in novamente. Se você estiver em uma estabilidade estável ponto no projeto, isso é bem menor - até desejável.
Se você fizer uma cópia de referência, a compilação tenderá a ser interrompida conforme as configurações do projeto forem alteradas - especialmente quando os arquivos do projeto forem adicionados ou descartados da compilação. Capturar explicitamente essas alterações não é necessariamente ruim, mas é uma etapa extra necessária para manter as compilações.
De qualquer forma, redirecionar a saída para um arquivo de log através da opção "-o" permite acessar o log de saída completo. O log não sai uma linha de cada vez, mas parece estar lá. (Na verdade, analiso o formato de erro Keil no GNU fmt para integração com o ambiente eclipse CDT. Isso me permite pular diretamente para erros / avisos após a compilação)
A compilação da linha de comando também gera os arquivos __i, __ia, para que eles também não precisem entrar no controle de versão do servidor de compilação.
Espero que isto ajude.
fonte