【问题标题】:Undefinition of MSVC definition _MBCS and definition of _UNICODE not possible calling cmake from command line [duplicate]MSVC 定义 _MBCS 的未定义和 _UNICODE 的定义无法从命令行调用 cmake [重复]
【发布时间】:2019-03-21 22:27:36
【问题描述】:

我想用 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。

【问题讨论】:

    标签: visual-studio-2010 cmake


    【解决方案1】:

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

    如果您不能使用add_definitionstarget_compile_definitions,您仍然可以通过在第一次调用cmake 时设置CMAKE_CXX_FLAGS_INIT 或在以后调用cmake 时更改CMAKE_CXX_FLAGS 来将标志传递给编译器:

    cmake -DCMAKE_CXX_FLAGS_INIT="-D_UNICODE -U_MBCS" ...
    

    【讨论】:

    • 好的,我看到它是不相关的。 CMAKE_CXX_FLAGS_INIT 对我来说看起来很有希望。我会试试看。我不确定,是否需要设置 -D_MBCS 或是否需要使用 -U_MBCS 取消设置。
    • 它不适用于 CMAKE_CXX_FLAGS_INIT。但它适用于 CMAKE_CXX_FLAGS。
    猜你喜欢
    • 2013-09-06
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 2011-04-24
    • 2015-02-27
    相关资源
    最近更新 更多