我目前正在使用CMake创建一堆Visual Studio 2013项目并且它可以工作。 但是,自动创建的ZERO_CHECK和ALL_BUILD项目默认设置为使用MBCS,尽管我希望它们使用Unicode字符集。
我确实使用以下内容为我的项目指定了Unicode字符集:
ADD_DEFINITIONS(-DUNICODE)
ADD_DEFINITIONS(-D_UNICODE)
它有效。我尝试用以下内容设置c ++编译器标志:
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /UMBCS /D_UNICODE /DUNICODE")
甚至:
ADD_DEFINITIONS(-DUNICODE)
ADD_DEFINITIONS(-D_UNICODE)
在我的项目设置之前,但它根本不影响ZERO_CHECK和ALL_BUILD。 任何想法?
答案 0 :(得分:3)
我找到了解决方案。
感谢迈克,我意识到我正朝着错误的方向寻找。 由于CMake不允许访问元目标(我可以理解为什么),因此必须这样做 设置Visual Studio环境以使用MBCS编译MFC。
This link解释了为什么Microsoft确实删除了对MFC项目的本机MBCS支持,this link提供了MFC-MBCS包的下载。
我会对此保持谨慎,因为我仍然希望我的项目使用Unicode,我将相应地使用CMake标志。但是,ZERO_PROJECT和ALL_BUILD现在编译得很好。
Raman Sharma's post让我终于看到了光明。
谢谢你们,你们让我的一天:D
祝你好运!
RL
答案 1 :(得分:2)
您可以使用cmake --build . -- /p:CharacterSet=Unicode
来构建项目,并将Unicode设置为characterset。
实际上,通过这种方式,您可以将参数传递给MSBuild本身,而不是CMake。
答案 2 :(得分:0)
ZERO_CHECK
和ALL_BUILD
是元目标。您的所有项目都依赖于ZERO_CHECK
,您的所有项目都是ALL_BUILD
的依赖项,但这两个项目本身并不生成任何库或可执行文件,因此您无需关心它们的构建设置。
还可能存在其他此类元目标,例如如果您使用INSTALL
函数,则install()
。
答案 3 :(得分:0)
在我的情况下,将cmake文件CMAKE_MFC_FLAG
中的值设置为非零值:
if(NOT WIN_HEAPINSPECTOR)
#static link runtime lib
set(CMAKE_MFC_FLAG 1)
elseif()
#dynamic link runtime lib
set(CMAKE_MFC_FLAG 2)
endif()
我将其更改为0,然后进行编译。