Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Гурман от Ноябрь 23, 2010, 15:00



Название: Как класть только 1 собранную .so библиотеку в нужный каталог?
Отправлено: Гурман от Ноябрь 23, 2010, 15:00
Qt 4.7, Kubuntu 10.10

При сборке динамической библиотеки в Linux создается библиотека с суффиксом .so.1.0.0 и линки на нее - .so, .so.1, .so.1.0

Мне надо, чтобы файл библиотеки ложился не в тот каталог, где происходит сборка, и создаются линки, а в другой. И чтобы в этом каталоге создавался только он один. Либо не создавать линки вообще. Можно ли это сделать настройками qmake, без использования дополнительного скрипта для копирования этого файла? Это существенно, поскольку проект мультиплатформенный, а скрипт, по определению, привязывает к Linux. Установка DLLDESTDIR не помогает, по указанному маршруту копия библиотеки не образуется.


Название: Re: Как класть только 1 собранную .so библиотеку в нужный каталог?
Отправлено: sadhu от Ноябрь 23, 2010, 15:27
попробуй просто DESTDIR и/или TARGET, но линки все равно будут создаваться


Название: Re: Как класть только 1 собранную .so библиотеку в нужный каталог?
Отправлено: Гурман от Ноябрь 23, 2010, 15:33
пробовал, это не то, мне надо или разделить библиотеку и линки, или копировать библиотеку без линков, или отключить создание линков


Название: Re: Как класть только 1 собранную .so библиотеку в нужный каталог?
Отправлено: sadhu от Ноябрь 23, 2010, 16:43
Лениво включать никсы ибо рабочий день подходит к концу, но по идее должно сработать так :
QMAKE_EXTRA_TARGETS +=clean_links

clean_links.commands=unlink *$$(VER_MAJ).so  *$$(VER_MAJ).$$(VER_MIN).so   *$$(VER_MAJ).$$(VER_MIN).$$(VER_PAT).so  

Но руку на отсечение бы не дал :)

А вот так вот работает точно :) , эт если надо линки где-то сохранять
#path to library file
fullLinkedPath=$$PWD/$$DESTDIR/
#links directory name
linksDir=links

#actions after creating lib file :
#go to destination catalog
#unlink all symlinks
#create new links in links directory
QMAKE_POST_LINK= cd $$DESTDIR && mkdir -p $$linksDir && unlink $(TARGET0) && unlink $(TARGET1) && unlink $(TARGET2) \
&& ln -fs $$fullLinkedPath/$(TARGET) $$linksDir/$(TARGET0)  && ln -fs $$fullLinkedPath/$(TARGET) $(TARGET1) $$linksDir\
&& ln -fs $$fullLinkedPath/$(TARGET) $(TARGET2) $$linksDir

а если не надо то можно сделать так :
QMAKE_LN_SHLIB=echo