如果您使用 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/