Как заставить qmake не создавать символические ссылки на target, когда TEMPLATE=lib?
Вопрос
У меня есть (частичный) файл проекта qmake, подобный этому:
TEMPLATE=lib
TARGET=whatever
SOURCES=whatever.cpp
HEADERS=whatever.h
Это позволит - по крайней мере, по умолчанию - создать библиотеку и несколько символических ссылок, подобных этой:
libwhatever.so -> libwhatever.so.0.1.0
libwhatever.so.0 -> libwhatever.so.0.1.0
libwhatever.so.0.1 -> libwhatever.so.0.1.0
libwhatever.so.0.1.0
libwhatever.so.0.1.0
является фактической двоичной библиотекой, остальные из них являются просто символическими ссылками.
Чего я хотел бы добиться, так это того, чтобы символические ссылки вообще не создавались или чтобы порядок был наоборот, чтобы libwhatever.so
это был бы фактический двоичный файл, а остальные - символические ссылки.
Решение
Если вы переопределите переменную QMAKE_LN_SHLIB значением no-op, она не будет создавать символические ссылки.
QMAKE_LN_SHLIB = :
Другие советы
Я попытался воспользоваться предложением, опубликованным swarfrat, и оно работает, но выдает ошибку с (довольно полезным) сообщением:
Error 1 (ignored)
Итак, вот еще один способ удаления символических ссылок без создания каких-либо ошибок:
unix: QMAKE_POST_LINK = find $$DESTDIR -maxdepth 1 -type l -exec rm -f {} \;
Более подробную информацию об этой переменной qmake можно найти здесь.
Вы можете добавить приведенное ниже в свой профессиональный файл:
CONFIG += unversioned_libname unversioned_soname
Я испытал успех.
Я изучил исходные тексты qmake и mkspecs, но, похоже, генерация символических ссылок довольно жестко запрограммирована.
Из того, что я нашел в источниках, кажется, что если вы добавите plugin
для настройки будет сгенерирована только библиотека, без символических ссылок.
Однако я не могу сказать вам, имеет ли это какие-либо другие побочные эффекты.Но, похоже, это единственный способ избавиться от символических ссылок без необходимости писать скрипт, который запускается после сборки.
Было бы полезно, если бы вы дали нам какой-нибудь намек на то, почему это важно...
Что касается того, как это сделать, вы могли бы рассмотреть сценарий, который изменит порядок действий по вашему вкусу и который запускается в конце процесса сборки.