我想用CMakeLists.txt中的cmake生成Visual Studio项目2010。基本上,这很好。但是,一个细节导致了我以下观察:
所生成的Visual Studio项目的默认字符集为“多字节字符”。我想将其更改为Unicode。据我了解,我需要定义_UNICODE
或UNICODE
,但是我还需要取消定义_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。
答案 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