如何在由Cmake生成的ALL_BUILD和ZERO_CHECK Visual Studio 2013项目中将unicode设置为字符集?

时间:2014-02-25 10:38:22

标签: unicode cmake visual-studio-2013 compiler-flags

我目前正在使用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。 任何想法?

4 个答案:

答案 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_CHECKALL_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,然后进行编译。