当TEMPLATE = lib时,如何强制qmake不创建目标的符号链接?

时间:2009-07-02 12:22:19

标签: linux qt qt4 qmake

我有一个(部分)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将是实际的二进制,其余是符号链接。

5 个答案:

答案 0 :(得分:5)

如果使用no-op覆盖QMAKE_LN_SHLIB变量,则不会生成符号链接。

QMAKE_LN_SHLIB       = :

答案 1 :(得分:2)

我试图通过swarfrat发布的建议并且它有效,但是它输出了一个错误(非常有用)的消息:

Error 1 (ignored)

因此,这是删除符号链接而不产生任何错误的另一种方法:

unix: QMAKE_POST_LINK = find $$DESTDIR -maxdepth 1 -type l -exec rm -f {} \;

有关此qmake变量的更多信息,请参见here

答案 2 :(得分:1)

我研究了qmake源和mkspecs,但似乎符号链接的生成是相当硬连线的。

根据我在源代码中找到的内容,似乎如果将plugin添加到CONFIG,则只会生成库,而不会生成符号链接。

但是,如果这样做有任何其他副作用,我无法告诉你。但它似乎是摆脱符号链接而不必编写构建后运行的脚本的唯一方法。

答案 3 :(得分:1)

您可以在下面添加到您的专业档案:

CONFIG += unversioned_libname unversioned_soname

我测试成功。

答案 4 :(得分:0)

如果你给我们一些关于它为何重要的暗示可能会有所帮助......

至于如何,您可以考虑一个脚本,它将根据您的喜好重新排列在构建过程结束时运行的内容。