我使用VisualStudio2010和CMake 2.8.12.1。我为MFC项目创建了一个CMakeLists.txt。 MFC功能是通过CMake文件中的以下行完成的:
add_definitions(-D_AFXDLL) #enables MFC
set(CMAKE_MFC_FLAG 2) #use shared MFC library
此外,项目将使用MD作为运行时库(默认)构建。但现在我希望我的项目可以构建为MT(这也需要指定静态MFC库)。所以我用以下代码替换了上面的行:
add_definitions(-D_AFXDLL) #enables MFC
set(CMAKE_MFC_FLAG 1) #use static MFC library
set(CMAKE_CXX_FLAGS_RELEASE "/MT") #set release configuration to MT
set(CMAKE_CXX_FLAGS_DEBUG "/MTd") #set debug configuration to MTd
如果我现在构建我的项目,我会收到错误消息:
致命错误C1189:#error:请使用/ MD开关进行_AFXDLL构建
据我所知,这意味着一方面的MT / MD与另一方的静态/共享MFC库之间存在不匹配。我再次检查了项目设置中的配置。运行时库IS设置为MT,MFC库IS设置为静态。所以我不明白这个错误。有人知道帮忙吗?我错过了什么吗?
此致 迈克尔
答案 0 :(得分:1)
_AFXDLL永远不会与静态MFC构建一起使用! _AFXDLL。
_AFXDLL仅在使用共享MFC构建时设置。
静态MFC构建也意味着静态CRT。