Как установить 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()
.