Как установить unicode как набор символов в проектах ALL_BUILD и ZERO_CHECK Visual Studio 2013, которые генерируются Cmake?

В настоящее время я использую CMake для создания кучи проектов Visual Studio 2013, и он работает. Однако автоматически созданные проекты ZERO_CHECK и ALL_BUILD по умолчанию используют MBCS, хотя я хочу, чтобы они использовали набор символов Unicode.

Я задал использование набора символов Unicode для моих проектов со следующим:

ADD_DEFINITIONS(-DUNICODE)
ADD_DEFINITIONS(-D_UNICODE)

и это сработало. Я попытался установить флагов компилятора С++ с чем-то вроде:

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /UMBCS /D_UNICODE /DUNICODE")

или даже:

ADD_DEFINITIONS(-DUNICODE)
ADD_DEFINITIONS(-D_UNICODE)

до моих настроек проекта, но это не повлияло на ZERO_CHECK и ALL_BUILD. Любые идеи?

Ответ 1

Я нашел решение.

Благодаря Майку, я понял, что искал в неправильном направлении. Поскольку CMake не дает доступа к мета-объектам (и я могу понять, почему), нужно настройте среду Visual Studio, чтобы скомпилировать MFC с MBCS.

Эта ссылка объясняет, почему Microsoft удалила родную поддержку MBCS для проектов MFC и эта ссылка предоставляет загрузку для пакета MFC-MBCS.

Я буду осторожен с этим, потому что все еще хочу, чтобы мои проекты использовали Unicode, и я буду использовать флаги CMake соответственно. Однако ZERO_PROJECT и ALL_BUILD теперь компилируются просто отлично.

Это сообщение Raman Sharma, в результате которого я наконец увидел свет.

Спасибо, ребята, вы сделали мой день: D

С уважением!

RL

Ответ 2

Вы можете использовать cmake --build . -- /p:CharacterSet=Unicode для создания вашего проекта с помощью набора Unicode в качестве набора символов. Фактически таким образом вы передаете параметр, чтобы сделать это для самого MSBuild, а не для CMake.

Ответ 3

ZERO_CHECK и ALL_BUILD являются мета-мишенями. Все ваши проекты зависят от ZERO_CHECK, все ваши проекты зависят от ALL_BUILD, но эти два проекта сами не производят никаких библиотек или исполняемых файлов, поэтому вам не нужно заботиться о своих настройках сборки.

Также могут быть и другие такие мета-мишени, например. INSTALL, если вы использовали функцию install().