Linux - faça a instalação sem substituir links simbólicos

Linux - faça a instalação sem substituir links simbólicos

Recentemente (e tolamente, já que há uma solução simples aqui, configurei --prefix=a opção para algo diferente de default /usr/bin) configured e maked gcc-4.9.1, sem definir a --prefix=opção. Eu realmente não quero repetir maketudo, já que levará muito tempo.

Meu /usr/bin/diretório já contém gcc-4.8.2, conforme instalado pelo sistema operacional (Ubuntu-14.04). O ponto principal é que todos os links simbólicos existentes apontam para coisas como gcc-4.8e serão substituídos no comando make installpor links simbólicos para gcc-4.9etc.g++-4.9

Posso passar um argumento para make, dizendo para não substituir links simbólicos que já existem? Ou similar?

Responder1

Primeiramente, observe queo prefixo padrãoa menos que um seja especificado explicitamente, geralmente é /usr/local. Portanto, substituir a instalação em/usr pode nem ser um problema no seu caso, embora certamente possa causar confusão no futuro, tendo um GCC em/usr e outro em/usr/local.

Embora eu não tenha certeza se ele funciona especificamente com o gcc-4.9.1 (embora eu veja poucas razões para que isso não aconteça), o autoconf (que gera o configurescript) fornece facilidades parasubstituindo o prefixo no momento da instalação.

Citando odocumentação do autoconf, seção "nomes de instalação":

A maneira mais portátil de afetar os locais de instalação é passar os locais corretos para configuração; entretanto, muitos pacotes fornecem um ou ambos os seguintes atalhos para passar atribuições de variáveis ​​para a linha de comando 'make install' para alterar os locais de instalação sem ter que reconfigurar ou recompilar.

O primeiro método envolve fornecer uma variável de substituição para cada diretório afetado. Por exemplo, 'make install prefix=/path/to/alternate' escolherá um local alternativo, bem como influenciará todas as outras variáveis ​​de configuração de diretório que foram expressas em termos de '${prefix}' (ou, dito de outra forma, todas diretórios especificados durante a configuração, mas não em termos do prefixo comum, devem ser substituídos no momento da instalação para que toda a instalação seja realocada). A abordagem de substituições de variáveis ​​​​makefile para cada variável de diretório é exigida pelos Padrões de Codificação GNU e, idealmente, não causa recompilação. Porém, algumas plataformas possuem limitações conhecidas com a semântica de bibliotecas compartilhadas que acabam exigindo recompilação ao utilizar este método, particularmente perceptível em pacotes que utilizam GNU Libtool.

O segundo método envolve fornecer a variável 'DESTDIR'. Por exemplo, 'make install DESTDIR=/path/to/alternate' irá preceder '/path/to/alternate' antes de todos os caminhos de instalação. A abordagem de substituições 'DESTDIR' não é exigida pelos Padrões de Codificação GNU e não funciona em plataformas que possuem letras de unidade. Por outro lado, evita melhor problemas de recompilação e funciona bem mesmo quando algumas opções de diretório não foram especificadas em termos de '${prefix}' no momento da configuração. Para pacotes que suportam 'DESTDIR', a variável deve permanecer indefinida durante o configure e o 'make all', e somente ser especificada durante o 'make install'.

Entãomake install DESTDIR=/opt/gcc-4.8.2 devefaça praticamente o que você procura. Pode ser necessário mover os arquivos um pouco depois, dependendo da estrutura exata de diretórios desejada, mas deve ser boa o suficiente para começar.

Observe que não testei isso; você o executa por sua própria conta e risco.

informação relacionada