Qt .pro 转换为 nmake Makefiles 无法处理静态库,在 VS2008 解决方案中同样有效

Posted

技术标签:

【中文标题】Qt .pro 转换为 nmake Makefiles 无法处理静态库,在 VS2008 解决方案中同样有效【英文标题】:Qt .pro's transformed into nmake Makefiles can't handle staticlibs, same thing in VS2008 solution works 【发布时间】:2010-03-10 14:38:06 【问题描述】:

我有一个基于 Qt .pro 文件的构建环境,该文件转换为 Visual Studio 2008 解决方案和 Makefile(由 nmake 使用)。大约有 30 个项目,直到最近都编译成单独的 dll(主要编译成 exe)。

最近我添加了一个配置为静态库的项目。 Visual Studio 链接一切都很好。 nmake 对该静态库中使用的每个符号都有未解析的外部。

Makefile 中的项目顺序没问题 Qt的依赖没问题

使用: 视觉工作室 2008 Qt Visual Studio 集成 1.4.3 Qt 4.5.2

有什么建议吗?所有日志组合或任何有用的选择都太大而无法发布。

【问题讨论】:

更新:qmake 填充 Makefile 的 LIBS 变量的方式与 VS 解决方案的 Linker->Input->“Additional dependencies”不同。 LIBS 变量删除了 1 个 lib 文件并添加了 1 个其他 lib 文件,这是重复的。这会导致未解决的外部问题。明天更,需要睡觉。 【参考方案1】:

在解析 LIBS 变量时,对于每个条目,-l qmake 都会检查文件是否存在于 libpath 中。如果它可以找到它,它会添加一个到 Makefile 的绝对链接,如果不是它只是添加文件名并让 nmake 自己查找它。

我有 2 个条目:-lmystatic 和 -lmystatic2。我第一次生成我的 Makefile 时,它​​写道:

LIBS = ... mystatic.lib mystatic2.lib ...

如果我重新生成我的 Makefile,它应该这样写:

LIBS = c:\sandbox\bin\mystatic.lib c:\sandbox\bin\mystatic2.lib

相反,它写道:

LIBS = c:\sandbox\bin\mystatic2.lib c:\sandbox\bin\mystatic2.lib

我认为发生的事情是 qmake 获取与“mystatic”匹配的所有文件的列表,并获取第一个。不幸的是,“mystatic2.lib”也匹配这个并且“mystatic2.lib”在词法上在“mystatic.lib”之前结束。

Qt Visual Studio 集成做同样的事情。 VS 过滤掉重复项,但包含项中缺少 .lib 条目。我一直无法找出为什么 VS 能够这样链接。

【讨论】:

以上是关于Qt .pro 转换为 nmake Makefiles 无法处理静态库,在 VS2008 解决方案中同样有效的主要内容,如果未能解决你的问题,请参考以下文章

Qt:PRO 到 CMake 的转换——AutoMoc 子进程错误

从 Visual Studio 2012 中浏览 Qt 5.1.1 基本源 - 将 .pro 转换为 .sln 文件

使用 Visual Studio 构建 qt 项目

使用nmake构建静态版qt

将 nmake 转换为 make

是否有用于将 NMAKE 构建文件转换为 CMAKE 构建文件的转换实用程序?