Определите символы DEBUG и RELEASE в коде Visual Studio - PullRequest
0 голосов
/ 10 ноября 2019

Использование Visual Studio Code 1.39.2 в Ubuntu 18.04. В моей программе на C ++ есть задачи для создания Makefile с помощью Cmake с помощью команды cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=Debug ... Существует эквивалентная версия Release.

После этого запускается задача make, которая правильно создает версию DEBUG и RELEASE в папках ./PROJECT/build/Debug или ./PROJECT/build/Release.

Проблемакод Visual Studio не распознает символы Debug или _DEBUG, поэтому код, подобный следующему, не работает должным образом:

#ifdef _DEBUG   // or #ifdef Debug
    cout << "Debug build\n";
#else
    cout << "Release build\n";
#endif

При запуске приложения печатается только Release build, никогда Debug build. Более того, в редакторе кода Visual Studio строка Debug build неактивна.

Опциональное определение символов с помощью #define DEBUG является опцией, но требует изменения файла вручную каждый раз при изменении типа сборки. .

Как получить код Visual Studio для определения и понимания правильных символов на основе выбранной задачи сборки? Или есть какой-нибудь умный способ заставить код «изучить» сгенерированные файлы CMake / make (такие как CMakeCache.txt, cmake_install.cmake, Makefile)?

1 Ответ

0 голосов
/ 10 ноября 2019

Примечание. Это решение решит проблему непонятных символов во время компиляции. Однако проблема в редакторе Visual Studio, не понимающем символы _DEBUG или NDEBUG для представления, остается проблемой.

В комментариях к вопросу этот вопрос был предложен какдублировать. Существует некоторое совпадение, но этот вопрос относится к Eclipse IDE и использует устаревшие команды CMake. Но он дает некоторые подсказки и после поиска в документации CMake позволяет решить проблему с этими изменениями на CMakeLists.txt:

Шаг 1 - При необходимости, явно установить тип сборки CMake

В верхней части CMakeLists.txt добавить следующее:

if (CMAKE_BUILD_TYPE STREQUAL "")
    # Build type is not set eg. command was "cmake .."
    message(STATUS "  Diag: Build type was unspecified, set to Release")
    set(CMAKE_BUILD_TYPE Release)
else ()
    message(STATUS "  Diag: Build type specified as '${CMAKE_BUILD_TYPE}'")
endif ()

Шаг 2 - определить «_DEBUG» и другие символы

После кода из шага 1 добавить следующее:

if (${CMAKE_BUILD_TYPE} STREQUAL Debug)
    set_directory_properties(PROPERTIES COMPILE_DEFINITIONS "_DEBUG")
else ()
    set_directory_properties(PROPERTIES COMPILE_DEFINITIONS "NDEBUG")
endif ()

Теперь вызовите CMake одним из следующих трех способов из некоторой папки build. Это может быть либо из командной строки, либо как задача внутри кода Visual Studio, затем make окончательный двоичный файл:

  • cmake ..
  • cmake -G 'Unix Makefiles'-DCMAKE_BUILD_TYPE = Release ..

Выпуск двоичного файла и отображение Release build

  • cmake -G' Unix Makefiles '-DCMAKE_BUILD_TYPE = Debug ..

Отладка двоичного файла и отображение Debug build

...