Como instalar uma biblioteca compartilhada ao instalar em um caminho do sistema?

0

Estou experimentando como distribuir uma biblioteca gráfica simples para Linux usando Makefile . A biblioteca compartilhada é chamada de libsgtk.so . Aqui está minha primeira tentativa para o Makefile :

CFLAGS= -pthread \
       -I/usr/include/gtk-3.0 \
       -I/usr/include/pango-1.0 \
       -I/usr/include/atk-1.0 \
       -I/usr/include/cairo \
       -I/usr/include/gdk-pixbuf-2.0 \
       -I/usr/include/glib-2.0 \
       -I/usr/lib/x86_64-linux-gnu/glib-2.0/include

all: libsgtk.so

libsgtk.so: window.o
    gcc -shared -o libsgtk.so window.o

window.o: window.c
    gcc $(CFLAGS) -c -fpic window.c

clean:
     rm window.o

install:
    mv libsgtk.so /usr/local/lib

Como você pode ver, codifiquei o caminho da instalação para /usr/local/lib . Esta é uma abordagem recomendada? O que devo fazer se já existir uma biblioteca com o mesmo nome nesse caminho? Isso deve ser verificado no Makefile, ou existem algumas outras ferramentas que eu deveria usar que poderiam me fornecer um caminho de instalação alternativo?

    
por Håkon Hægland 24.03.2018 / 18:57

1 resposta

2

Eu acho que você deveria usar variáveis. Por exemplo:

DESTDIR?=/usr/local/lib
...
install:
  mv libsgtk.so ${DESTDIR}

Nesse caso, o usuário pode sobrescrever o valor padrão com make DESTDIR=/usr/lib (observe o ? acima).

Se você quiser, pode testá-lo. Talvez não seja uma má ideia. O método mais simples é usar mv -n (ou mv -nv ) em vez de mv : não sobrescreve o arquivo existente. Sua principal desvantagem é que o valor de retorno de mv é zero, então o make não saberá que o movimento não foi sucesso.

Mas se você usar cp (copy) em vez de mv , será bom: o cp -n é return 1 (diferente de zero) quando o arquivo de destino existe. Então a solução (teste incluso):

install:
  cp -n libsgtk.so ${DESTDIR}

Apenas uma pergunta útil: você sabe sobre PHONY targets em Makefile ? Você deve usá-lo para install e clean targets (observação: você deve excluir libsgtk.so também em clean ).

    
por 24.03.2018 / 19:34