将静态库与qmake链接时如何提供链接器选项?

Rei*_*ica 6 qt qmake

我想在使用qmake 构建静态库时为链接器提供选项.假设我在使用MSVC构建时想要获得详细的链接器输出.项目文件如下所示:

# mylib.pro
TEMPLATE = lib
TARGET = mylib
CONFIG += staticlib
QT += core
win32-msvc*: QMAKE_LFLAGS += /VERBOSE
unix: QMAKE_LFLAGS += -v
Run Code Online (Sandbox Code Playgroud)

这是整个项目文件.它应该导致一个空的静态库,其中没有对象.

设置既不QMAKE_LFLAGS也没有QMAKE_LFLAGS_STATIC_LIB,也没有LIBS对连接器有任何影响.这些变量中没有设置甚至使它成为Makefile.如果QMAKE_LFLAGS有效,我希望在命令行上看到/VERBOSE-v传递给链接器,适用于给定的平台.

使用什么makefile生成器并不重要,这种行为似乎是一致的.这两个感兴趣的平台是.

qmake -spec win32-msvc2008
qmake -spec macx-llvm
Run Code Online (Sandbox Code Playgroud)

由于qmake的跨平台特性,您可以在碰巧安装Qt的任何平台上进行测试.这从qt 4.8.4和5.1.1再现qmake.mkspec中给出的msvc版本无关紧要.

Rei*_*ica 5

staticlib项目中,LFLAGS不会传递给链接器。实际上,没有记录下来的传递此类标志的方法。

该解决方案取决于发电机。

对于msvc_nmakeLIBFLAGS则传递给链接器。要获得详细的输出,您可以添加

QMAKE_LIBFLAGS += /VERBOSE
Run Code Online (Sandbox Code Playgroud)

为了验证它是否可以工作,可以在任何系统上调用qmake -spec win32-msvc2008;。特定的msvc版本无关紧要。

对于unixmakeAR用于调用链接,所以你必须将标志添加到QMAKE_AR。要获得详细的输出,您可以添加

QMAKE_AR += -v
Run Code Online (Sandbox Code Playgroud)

要进行验证,请调用qmake -spec macx-llvm; 其他任何Unix规范也应该可以正常工作。