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

时间:2015-07-20 14:48:12

标签: c++ qt

如果使用Qt构建库,则根据是否为Debug或Release构建库,库的名称后缀为“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}

但这样做的风格非常糟糕......有没有正确的方法?

2 个答案:

答案 0 :(得分:1)

在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")

答案 1 :(得分:1)

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

您的解决方案是两种典型方法之一。另一种方法是为库提供DebugRelease个文件夹,只更改库路径,而不更改库名称。

我不知道.pro文件中的额外几十个字符是如何被认为是繁重的。现实情况是,如果你有大量和复杂的项目,你将拥有庞大的项目文件,无论是qmake,qbs还是cmake。这将是你遇到的最少的问题,所以我要说不要太过分了。

鉴于你正在使用qmake,你的问题根本不是与Windows有关的问题。答案适用于所有平台。