Estou experimentando como distribuir uma biblioteca gráfica simples para Linux usando um arquivo Makefile
. A biblioteca compartilhada é chamada 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 de instalação para /usr/local/lib
. Essa é 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 outras ferramentas que devo usar que possam fornecer um caminho de instalação alternativo?
Acho que você deveria usar variáveis. Por exemplo:
Nesse caso, o usuário pode substituir o valor padrão por
make DESTDIR=/usr/lib
(observe o?
acima).Se quiser pode testar. Talvez não seja uma má ideia. O método mais simples é usar
mv -n
(oumv -nv
) em vez demv
: não sobrescreve o arquivo existente. Sua principal desvantagem é que o valor de retornomv
é zero, entãomake
não saberá que a mudança não foi bem-sucedida.Mas se você usar
cp
(copiar) em vezmv
disso, será bom:cp -n
retornará 1 (diferente de zero) quando o arquivo de destino existir. Então a solução (teste incluído):Apenas uma pergunta de ajuda: você conhece
PHONY
alvos emMakefile
? Você deve usá-lo parainstall
eclean
alvos (observação: você deve excluirlibsgtk.so
também emclean
).