Posso compilar em um computador e 'make install' em outro?

2

Dado dois computadores A e B com as mesmas especificações, ambos com a mesma distribuição Linux, é possível 'fazer' compilar no computador A e copiar o diretório para o computador B e 'fazer a instalação' sem problemas?

    
por Kolt Penny 05.04.2015 / 08:14

2 respostas

3

Em geral, deve ser possível, se ambos os hosts realmente tiverem as mesmas especificações (ou seja, mesma arquitetura de processador, mesmas bibliotecas nas mesmas versões instaladas, mesmo kernel instalado, mesma estrutura de sistema de arquivos / bibliotecas, ...) . Mas como você pode fazer coisas desagradáveis em Makefiles, pode ser situações em que isso não é possível.

O comando make normalmente compila todas as fontes, vincula-se às bibliotecas instaladas e ao kernel e, em seguida, gera o arquivo de saída binário.

    
por 05.04.2015 / 08:21
1

Recentemente, tive que compilar uma versão 2010 de qemu , o que era difícil no sistema operacional Ubuntu 16.04 moderno devido a problemas de dependência. Então, eu fui forçado a fazer um make (compilação) em um Ubuntu 10.04 , e então um make install no Ubuntu 16.04.

make usa timestamps para decidir quais ações precisam ser tomadas. Portanto, desde que os registros de data e hora sejam preservados quando os arquivos compilados forem transferidos do computador no qual a compilação foi feita para o computador no qual a instalação deve ser feita, ele deverá funcionar. Existem várias ferramentas para salvar e restaurar meta-data de arquivos em uma árvore de diretórios, como metastore e git-cache-meta . O último é para uso com repositórios git, pois o git não preserva os timestamps. Outras ferramentas como rsync e cp permite que você transfira arquivos enquanto preserva os timestamps, e não exige que você os salve e restaure explicitamente, como nas duas ferramentas anteriores .

Se, como eu, você estiver usando um servidor git para transferir arquivos entre os dois computadores (git push e git pull). Aqui estão os passos necessários para isso.

#Computer 1 (where compilation is to be done)
make
git-cache-meta --store #this will create a .git_cache_meta file in the current directory
git add .
git commit -m "installed binaries; preserving timestamps"
git push origin master #or whatever may be your remote repository, and branch


#Computer 2 (where install is to be done)
git pull origin master #or use git clone <remote repository URL> <branch name>
git-cache-meta --apply
make install

No seu caso, rsync parece uma solução mais simples, já que pode copiar arquivos, ao mesmo tempo preservando timestamps ( -t option ), sem se preocupar com repositórios git remotos, etc.

Veja como você fará isso com rsync .

rsync -a <source> <destination>

Da mesma forma, com o comando cp .

cp -a <source> <destination>

Nota: Embora no seu caso o computador e o SO sejam os mesmos, pode não ser assim para outra pessoa e, nesse caso, as dependências dinâmicas (dependências de tempo de execução) devem ser atendidas. . Por exemplo, no meu caso eu tive que instalar libz.so.1 , na minha máquina Ubuntu 16.04 ( sudo apt-get install lib32z1 ).

    
por 20.08.2016 / 14:31