Как заставить qmake не создавать символические ссылки на target, когда TEMPLATE=lib?

StackOverflow https://stackoverflow.com/questions/1074050

  •  21-08-2019
  •  | 
  •  

Вопрос

У меня есть (частичный) файл проекта 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 для настройки будет сгенерирована только библиотека, без символических ссылок.

Однако я не могу сказать вам, имеет ли это какие-либо другие побочные эффекты.Но, похоже, это единственный способ избавиться от символических ссылок без необходимости писать скрипт, который запускается после сборки.

Было бы полезно, если бы вы дали нам какой-нибудь намек на то, почему это важно...

Что касается того, как это сделать, вы могли бы рассмотреть сценарий, который изменит порядок действий по вашему вкусу и который запускается в конце процесса сборки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top