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 子进程错误