我无法重现您的问题。
我用给定的值创建了一个新的环境变量PLATFORM_SDK
:C:\Program Files\Microsoft SDKs\Windows\v7.0
. 然后我重新启动 Qt Creator 并检查 PLATFORM_SDK 是否可以在环境变量列表中找到(请参见此处)。然后我创建了一个简单的 .pro 文件,并在其中放置了以下几行:
LIBS = $$quote($(PLATFORM_SDK)/lib/SHFolder.lib)
message($$LIBS)
LIBS = $$quote(-L$(PLATFORM_SDK)/lib) -lSHFolder
message($$LIBS)
LIBS = $$quote(C:\Program Files\Microsoft SDKs\Windows\v7.0/lib/SHFolder.lib)
message($$LIBS)
运行 QMake 后,我得到以下结果(在 中Compile Output
):
Project MESSAGE: C:\Program Files\Microsoft SDKs\Windows\v7.0/lib/SHFolder.lib
Project MESSAGE: -LC:\Program Files\Microsoft SDKs\Windows\v7.0/lib -lSHFolder
Project MESSAGE: C:\Program Files\Microsoft SDKs\Windows\v7.0/lib/SHFolder.lib
也就是说,您的第一个和第三个声明给出了完全相同的结果,使用环境变量没有问题。
编辑:在下面的评论中进行对话后,我可以尝试解释问题所在。
qmake 是一个基于 .pro 文件中的信息创建 Makefile 的工具。在 .pro 文件中,变量可用于存储环境变量的内容。这些可以在运行 qmake 时进行评估,也可以包含在生成的 Makefile 中以在项目构建时进行评估。如果使用$(...)
运算符,则在处理生成的 Makefile 时会获取环境变量的内容。但是如果你使用$$(...)
操作符,那么在运行 qmake 时,即生成你的 Makefile 时,就会得到环境变量的内容。
在您的情况下,如果您LIBS += $$quote($(PLATFORM_SDK)/lib/SHFolder.lib)
的 .pro 文件中有该行,那么您的 Makefile 将包含该行:LIBS = $(PLATFORM_SDK)/lib/SHFolder.lib
。但是,如果您LIBS += $$quote($$(PLATFORM_SDK)/lib/SHFolder.lib)
的 .pro 文件中有这一行,那么您的 Makefile 将包含这一行:"C:\Program Files\Microsoft SDKs\Windows\v7.0/lib/SHFolder.lib"
.
如您所见,主要区别在于,在前一种情况下,生成到 Makefile 中的行没有用双引号括起来,这将是一个问题,因为您的环境变量包含一个带有空格的路径。我不知道为什么在前一种情况下缺少双引号。它们应该在那里,因为您使用了 function $$quote(...)
。