вторник, 14 октября 2025 г.

Особенности cmake в Visual Studio 2022

 Во время отладки кода из hackerrank, наткнулся на такую проблему, что он не компилируется, если вместо "классического" способа создания проекта (sln- и vcxproj-файлы) создавать его с помощью cmake и CMakeLists.txt. Вот такие сообщения получаю 'not1': identifier not found:


Зайдя  определение функций not1, ptr_fn, видим, что они "_cxx17_deprecate" 


Теперь идем и видим вот такое в CMakelists.txt:

if (CMAKE_VERSION VERSION_GREATER 3.12) set_property(TARGET QueriesWithFixedLength PROPERTY CXX_STANDARD 20) endif()

То есть, если версия cmake новее, чем 3.12, то надо использовать C++20. Проверим версию cmake, используя Visual Studio 2022 command prompt, используя команду cmake --version:


Как видим, у нас версия 3.31. Не заморачиваясь с тем, какая версия C++ будет использоваться по умолчанию, если удалить эту директиву, мы просто поменяем версию на C++14:

if (CMAKE_VERSION VERSION_GREATER 3.12) set_property(TARGET QueriesWithFixedLength PROPERTY CXX_STANDARD 14) endif()

После этого все скомпилировалось.

Еще добавил эту строчку:

file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/input01.txt" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")

потому что без нее не считывало входные файлы ("старым" методом все работало и так).

Комментариев нет:

Отправить комментарий