2014-02-25 152 views
10

我目前使用CMake来创建一堆Visual Studio 2013项目,它的工作原理。 但是,默认情况下,自动创建的ZERO_CHECK和ALL_BUILD项目设置为使用MBCS,但我希望它们使用Unicode字符集。如何将unicode设置为由Cmake生成的ALL_BUILD和ZERO_CHECK Visual Studio 2013项目中的字符集?

我没有指定使用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

为什么你想首先更改ALL_BUILD和ZERO_CHECK项目?它们只是元项目,其中的设置不应该对正在生成的代码产生任何影响。 – ComicSansMS

+0

@ComicSansMS那么我使用的是Windows MFC,并且由于ZERO_PROJECT正在编译之前,我得到此错误消息: 不建议为非Unicode字符集生成MFC项目。您必须将项目属性更改为Unicode或下载其他库。 有关更多信息,请参阅http://go.microsoft.com/fwlink/p/?LinkId=286820。 经常使用CMake,我必须每次都手动将字符设置为Unicode。从我的角度来看,这真的很烦人。 –

回答

3

我找到了一个解决方案。

感谢迈克,我意识到我正在寻找错误的方向。 因为CMake不允许访问元目标(我可以理解为什么),所以必须设置一个 来设置Visual Studio环境以使MFC能够与MBCS一起编译。

This link解释了为什么Microsoft确实删除了MFC项目的本机MBCS支持,this link提供了MFC-MBCS包的下载。

我会对此保持谨慎,因为我仍然希望我的项目使用Unicode,因此我将使用CMake标志。但是,ZERO_PROJECT和ALL_BUILD现在编译得很好。

这是让我终于看到光的Raman Sharma's post

感谢你们,你让我的一天:d

最好的问候!

RL

0

ZERO_CHECKALL_BUILD是元目标。您的所有项目都依赖于ZERO_CHECK,您的所有项目都依赖于ALL_BUILD,但这两个项目本身不会生成任何库或可执行文件,因此您无需关心其构建设置。

也可能有其他这样的元目标,例如, INSTALL如果您使用install()函数。

+0

这是否意味着使用CMake我无法控制那些元目标? 有没有办法自动把Unicode作为任何Visual 2013项目的默认字符集?或者我每次使用CMake重新生成解决方案时,都必须手动设置该参数? 无论如何,谢谢:) –

+0

是的,你无法控制这些目标。至于一次向所有目标添加标志,您只需在顶级CMakeLists.txt中调用'add_definitions()'一次。之后通过'add_subdirectory()'添加的所有项目都会继承这些定义。 –

2

你可以使用cmake --build . -- /p:CharacterSet=Unicode构建项目使用Unicode设置字符集。 事实上,通过这种方式,你传递一个参数来做到这一点,而不是CMake本身。

相关问题