Olá OCCA-ers,
Algum plano para ter cmake para gerar o sistema de compilação?
Todos os nossos softwares de computação científica o utilizam. Isso requer um bom esforço, mas compensa uma vez feito.
melhor,
Amik
Meus 2 centavos...
Muitos pacotes de software que emprego (por exemplo, VTK) são configurados e construídos usando cmake, mas eu não gosto disso. Não tanto para a linguagem cmake e o código que se tem que escrever, mas sim para os "componentes" de makefile muito obscuros que ele gera em uma estrutura de diretório profunda e ofuscada. Portanto, descobrir por que o cmake está falhando, ou por que algo não está compilando corretamente, ou como ajustar uma compilação, pode ser um esforço não trivial (pelo menos para mim).
Gerar um makefile para o ambiente de compilação atual de acordo com as especificações de configuração geralmente é uma coisa boa, mas seja qual for o gerador, o IMHO deve gerar apenas um makefile simples, simples e direto que seja legível e potencialmente ajustável (como o venerável 'configure ' faz). Isso com certeza não é cmake!
Oi Paul,
Eu não estou apaixonado por ele, mas uma vez instalado em um projeto, é bastante sólido. A principal vantagem disso é a integração e o teste. Por exemplo - suponha - eu começaria a integrar o OCCA em um código bastante grande, colocaria a fonte em um diretório chamado 3rdparty e, se estivesse usando cmake, apenas informaria ao cmake do novo diretório add_directory(...) . Em seguida, ele compilaria o OCCA automaticamente, usando os compiladores e outras especificações do CMakeLists.txt "principal". Se eu adicionasse dependências ao OCCA em um driver de teste (inicialmente) e a mais diretórios de origem/outros depois, seria muito fácil.
Minha experiência com cmake é que, se você tiver problemas no nível "make", geralmente o problema é que você se especializou demais (por exemplo, forçar sinalizadores de compilador explícitos...) cmake no nível superior. Para a maioria dos problemas, make VERBOSE=1 revelará a linha de compilação completa (que você pode recortar e colar) para descobrir o que está errado (e depois alterar o cmake (não o make)).
Nós também usamos ctest o tempo todo ...
De qualquer forma, só queria testar as águas em relação a isso.
melhor,
Amik
Sou fã dele ( talvez até demais ), aliás, o suporte ao CMake foi a primeira coisa que procurei. Eu gerencio todas as dependências (por exemplo em GooFit ) como git submodules em extern e, em seguida, o CMake verificará essas dependências para o usuário se ele não souber sobre submódulos, então o CMake combina todas as dependências. O melhor do CMake é que ele suporta qualquer forma de trabalho - se eu quiser usar um IDE, por exemplo, como o Xcode, é fácil apenas se o CMake for usado. Eu posso adicionar CCache, compilações de depuração, clang-tidy, etc. com bastante facilidade.
@henryiii Se tiver integração com IDE, parece uma boa ideia!
Estou hesitante em remover a compilação do Makefile, pois make
pode ser encontrado pronto para uso na maioria dos lugares, mas podemos adicionar suporte ao CMake junto com ele. Podemos atualizar a configuração do CI para executar testes com compilações make
e cmake
.
Se você tiver tempo, você pode fazer um PR para ele com os arquivos principais do CMake? Se ajudar, posso adicionar todas as variáveis de ambiente/efeitos colaterais esperados durante o tempo de compilação
No momento, usuários novos / potenciais do OCCA (programadores de HPC) só precisam baixar a fonte do OCCA e digitar make
. Muito simples. Para mim, a proposta de valor da OCCA é baseada 100% nos recursos excelentes que ela oferece no domínio da programação paralela, não em seu sistema de compilação. No entanto, talvez houvesse um pequeno valor agregado para o OCCA passar para compilações baseadas em cmake, não sei.
Talvez alguém com conhecimento em codificação cmake possa escrever os arquivos cmake necessários e contribuir com eles para o OCCA por meio de uma solicitação pull? Isso pode ajudar a satisfazer as preocupações que algumas pessoas parecem ter e ajudá-las a realmente usar o OCCA.
Voltando ao assunto do cmake, para alguns de nós, "a milhagem pode variar". Sério, tenho certeza de que meu entusiasmo pelo cmake aumentaria muito se eu realmente aprendesse a escrever / depurar / modificar o código da linguagem cmake em um nível além do meu estágio atual de pré-novato. Enquanto isso, quando encontro problemas frustrantes com arquivos Find*.cmake
CMakeLists.txt
mal escritos/desatualizados e/ou com erros ou mal escritos de alguém funcionando corretamente para algum pacote que acabei de baixar de github para avaliação, posso ter sensações desagradáveis de apreciação negativa!
@pdhahn Só para ficar claro, acho que nunca me livraria da compilação "único tipo make
para compilar". Definitivamente precisa de limpeza (#149), mas simplificar a instalação e o uso para os usuários é a prioridade número um aqui
Adicionar o CMake ajudaria a usar o OCCA em projetos que já usam o CMake e parece facilitar a vida do desenvolvedor com essa integração de IDE.
@ dmed256 Você está certo, a coisa do IDE parece que poderia ser um valor agregado não trivial para o OCCA!
Mas você precisa acomodar uma variedade de IDEs populares no mínimo, como eclipse e Qt Creator.
O CMake suporta todos os tipos de ferramentas (e todos os tipos de ferramentas suportam), não apenas IDEs. Todos os principais IDEs são suportados pelo CMake ou o CMake os suporta. CLion, Qt Creator, Eclipse, Xcode e muito mais. Ele também suporta link-what-you-use, include-what-you-use, clang-tidy, ccache, várias integrações de teste, empacotamento e muito mais.
Se a compilação do CMake funcionou bem, você pode eventualmente fazer com que o Makefile simplesmente chame o CMake para você, já fiz isso antes no GooFit. Você pode até fazer o download do makefile para CMake e depois chamá-lo (não tentei isso antes, mas acho que já conversei com alguém que tentou); isso permitiria que ele funcionasse em qualquer lugar e com a versão mais recente (você só precisaria ter uma alternância simples que baixasse o binário linux ou macos, dependendo de onde você estivesse executando).
Espero avaliar o occa nas próximas semanas e, em seguida , poderei ajudar com o suporte do CMake.
@henryiii Isso faz sentido, temos pouco tempo :) Independentemente disso, aprecie o conselho do CMake!
Agradecimentos finais a todo o trabalho de @hknibbe2 , @SFrijters , @amikstcyr e @JamesEggleton 🎉