如何处理Windows上.pro文件中不同的库名称

How to deal with varying library names in .pro files on Windows?

本文关键字:文件 pro 何处理 处理 Windows      更新时间:2023-10-16

如果你用Qt构建库,取决于它是调试版还是发布版,库的名字中将有"d"后缀。例如:

QtCored.dll 

然后,如果你想把它链接到你的应用程序,你必须链接正确的版本(调试或发布),这意味着每次都要在.pro文件中明确地命名它们。

Release:LIBS += -llib1 -llib2 -llib3
Debug:LIBS += -llib1d -llib2d -llib3d

据我所知,这是.pro文件可能的(也是通常的)场景。

问题是——这对程序员来说是不是有点太极端了?例如,如果环境已经知道正在以发布模式构建,为什么我们被迫重新键入所有内容2次?真的没有机制告诉Qt"附加d后缀到该条目中的所有库"吗?

到目前为止,我做的是:

//(in a globally included .pro file)
CONFIG( debug, debug|release ) {
    windows:DADD=d
} else {
    DADD=
}
//in actual .pro file
LIBS += -llib1$${DADD} -llib2$${DADD} -llib3$${DADD}

但是这样做感觉非常糟糕…有合适的方法吗?

在Windows上,从代码中执行。

#ifdef NDEBUG
#pragma comment (lib, "QtCore.dll")
#else
#pragma comment (lib, "QtCored.dll")
#endif

或者如果你需要更多

#ifdef NDEBUG
#define DEBUGSUFFIX ""
#else
#define DEBUGSUFFIX "d"
#endif
#pragma comment (lib, "QtCore" DEBUGSUFFIX ".dll")
#pragma comment (lib, "Etc" DEBUGSUFFIX ".dll")

环境不能知道您有可用的库的发布版本和调试版本。这些库可能来自任何地方。

你的解决方案是两种典型方法之一。另一种方法是为库设置DebugRelease文件夹,并且只更改库路径,而不更改库名称。

我不明白为什么。pro文件中额外的几十个字符会被认为是负担。现实情况是,如果你的项目规模和复杂性都很大,你就会有巨大的项目文件,无论是qmake、qbs还是cmake。这将是你最小的问题,所以我建议你不要太担心。

考虑到你正在使用qmake,你的问题并不是真的与windows相关。一个答案将适用于所有平台。