无法定义MSVC定义_MBCS和_UNICODE的定义,无法从命令行调用cmake

时间:2019-03-21 22:27:37

标签: visual-studio-2010 cmake

我想用CMakeLists.txt中的cmake生成Visual Studio项目2010。基本上,这很好。但是,一个细节导致了我以下观察:

所生成的Visual Studio项目的默认字符集为“多字节字符”。我想将其更改为Unicode。据我了解,我需要定义_UNICODEUNICODE,但是我还需要取消定义_MBCS。如果我将其放在CMakeLists.txt中,但我想通过命令行设置以下定义,则无法正常工作:

CMakeList.txt,效果很好:

add_definitions ( -D_UNICODE )
remove_definitions ( -D_MBCS )

命令行,如果我这样做,则cmake将忽略定义:

cmake -D_UNICODE="" -U_MBCS=""

命令行,如果我这样做,则cmake将忽略定义:

cmake -DCMAKE_CXX_FLAGS_INIT="-D_UNICODE -U_MBCS"

我假设这两种方法是相同的,但是显然从命令行对定义的处理是不同的。我做错了,还是只能使用 add_definitions / remove_definitions 吗?

顺便说一句,我正在使用cmake 3.10。

1 个答案:

答案 0 :(得分:0)

传递给-D的{​​{1}}标志与传递给编译器的cmake标志完全无关。参见cmake(1)。简而言之,-D大致等同于在CMakeLists.txt中使用set(VARIABLE VALUE CACHE STRING "")

如果您不能使用cmake -DVARIABLE=VALUE ...target_compile_definitions,则仍然可以通过在第一次调用cmake时设置CMAKE_CXX_FLAGS_INIT或稍后再更改add_definitions来将标志传递给编译器cmake的调用:

CMAKE_CXX_FLAGS