gpt4 book ai didi

c++ - Qt - 使用预处理器指令检查 Windows 上链接的 .lib 的可用性

转载 作者:可可西里 更新时间:2023-11-01 11:49:51 24 4
gpt4 key购买 nike

我正在尝试在 C++ 中使用预处理器指令来避免编译需要 .lib 的代码,以防库无法链接。

我的 .pro 文件包含:

INCLUDEPATH += "C:/Program Files/Windows Kits/8.0/Include/um"
LIBS += -L"C:/Program Files/Windows Kits/8.0/Lib/win8/um/x86" -l"winscard"

我的指令是这样的:

#ifdef _WINSCARD_H_
// do something
#endif

#ifndef _WINSCARD_H_
// do something
#endif

winscard 附带this windows sdk我绝对可以使用它的功能。当我尝试根据这些条件指令限制编译时,问题就出现了。


使用时代码编译良好

INCLUDEPATH += "C:/Program Files/Windows Kits/8.0/Include/um"
LIBS += -L"C:/Program Files/Windows Kits/8.0/Lib/win8/um/x86" -l"winscard"

在 .pro 文件中。

代码在编译阶段被跳过,就好像在使用上述 .pro 配置和条件指令时缺少库一样,即使库可用且已链接:

#ifdef _WINSCARD_H_
// code that needs to be compiled only when library is present and linked.
#endif

唯一的变化是引入了#ifdef _WINSCARD_H_ .

最佳答案

可以根据文件是否存在在 qmake 中生成条件构建。您可以在 .pro 文件中添加类似的内容

exists( C:/Program Files/Windows Kits/8.0/Lib/win8/um/x86/winscard* ) {
message( "Configuring for winscard..." )
INCLUDEPATH += "C:/Program Files/Windows Kits/8.0/Include/um"
LIBS += -L"C:/Program Files/Windows Kits/8.0/Lib/win8/um/x86" -l"winscard"
DEFINES += _WINSCARD_H_
}

内置函数exists()之后的 block 只有在找到路径时才会被解析(可以使用星号来匹配部分文件名)。此处 _WINSCARD_H_ 仅在找到所需文件时才定义。因此,该宏可以在源代码中用于条件编译。参见 qmake Test Functions Reference了解详情。

关于c++ - Qt - 使用预处理器指令检查 Windows 上链接的 .lib 的可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32772004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com