Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Cmake生成的ALL_BUILD和ZERO_CHECK Visual Studio 2013项目中将unicode设置为字符集?_Unicode_Cmake_Visual Studio 2013_Compiler Flags - Fatal编程技术网

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

如何在Cmake生成的ALL_BUILD和ZERO_CHECK Visual Studio 2013项目中将unicode设置为字符集?,unicode,cmake,visual-studio-2013,compiler-flags,Unicode,Cmake,Visual Studio 2013,Compiler Flags,我目前正在使用CMake创建一系列VisualStudio2013项目,而且效果很好。 但是,自动创建的ZERO_检查和所有_构建项目默认设置为使用MBCS,尽管我希望它们使用Unicode字符集 我确实为我的项目指定了Unicode字符集的使用,具体如下: ADD_DEFINITIONS(-DUNICODE) ADD_DEFINITIONS(-D_UNICODE) 它成功了。我尝试用如下的方式设置C++编译器标志: SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS

我目前正在使用CMake创建一系列VisualStudio2013项目,而且效果很好。 但是,自动创建的ZERO_检查和所有_构建项目默认设置为使用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\u CHECK
,您的所有项目都是
All\u BUILD
的依赖项,但这两个项目本身不生成任何库或可执行文件,因此您不必关心它们的生成设置

如果您使用
INSTALL()
函数,也可能有其他此类元目标,例如
INSTALL

我找到了解决方案

多亏了迈克,我才意识到我找错了方向。 由于CMake不允许访问元目标(我能理解为什么),因此必须 设置VisualStudio环境,使MFC使用MBCS编译

解释Microsoft为何删除对MFC项目的本机MBCS支持,并提供MFC-MBCS包的下载

我将对此保持谨慎,因为我仍然希望我的项目使用Unicode,并将相应地使用CMake标志。然而,ZERO_项目和所有_构建现在都可以正常编译

正是它让我终于看到了光明

谢谢你们,你们让我开心了:D

致以最良好的祝愿


RL

您可以使用
cmake--build。--/p:CharacterSet=Unicode
以Unicode集作为CharacterSet构建项目。 实际上,通过这种方式,您可以将一个参数传递给MSBuild本身,而不是CMake。

在我的例子中,CMake文件被设置为非零值:

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,然后对其进行编译。

您有什么理由要首先更改所有构建和零检查项目吗?它们仅是元项目,其中的设置不应对生成的代码产生任何影响。@Comics回答:我使用的是Windows MFC,由于ZERO_项目是在其他项目之前编译的,因此我收到以下错误消息:不推荐为非Unicode字符集构建MFC项目。必须将项目属性更改为Unicode或下载其他库。有关更多信息,请参阅。经常使用CMake,每次我都必须手动将字符设置为Unicode。从我的角度来看,这真的很烦人。这是否意味着使用CMake,我对这些元目标完全没有控制权?有没有办法自动将Unicode作为任何Visual 2013项目的默认字符集?还是每次使用CMake重新生成解决方案时都必须手动设置该参数?无论如何,谢谢:)是的,你无法控制这些目标。至于一次向所有目标添加标志,您只需在顶级CMakeLists.txt中调用
add_definitions()
一次。以后通过
add_subdirectory()
添加的所有项目都将继承这些定义。那么,生成的CMake代码是什么呢?我不能投票赞成一个说什么不该做的答案。