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

标签 c++ qt

如果您使用 Qt 构建库,根据是 Debug 还是 Release 构建,库的名称中将带有“d”后缀。例如:

QtCored.dll 

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

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

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

问题是——这对程序员来说是不是有点太极端了?例如,如果环境已经知道它正在以 Release模式构建,为什么我们被迫重新输入所有内容 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")

关于c++ - 如何处理 Windows 上 .pro 文件中不同的库名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31519549/

相关文章:

c++ - 如何将坐标分布对齐到完美对齐?

c++ - QT 是否使用托管代码?

qt - PyQt(或简称 QT)。如何让 QComboBox 在设置值(即使未更改)时触发信号

c++ - 没有显示的 Qt 5.1 QApplication - QXcbConnection : Could not connect to display

c++ - Qt 与 WinRT C++ 构建问题

c++ - 在 OSX 上从源代码构建 - c++

c++ - 使用 opencv 2.3.1 进行慢速视频捕获

c++ - 如何在 C++ 中从具有不同概率的数组中随机选择元素

c++ - 可变长度初始值设定项的模板

c++ - 段错误调用函数