Как изменить стандартное требование C ++ 14 с проекта на основе POCO на C ++ 17 - PullRequest
2 голосов
/ 05 мая 2019

Я строю проект с использованием Cmake и POCO, я использую vcpkg для управления своими зависимостями в Ubuntu, поэтому сначала так выглядит мой файл cmake

cmake_minimum_required(VERSION 3.8)
project(web)
set(CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Poco COMPONENTS Net Util PDF SQL XML REQUIRED)
add_executable(web "main.cpp")
target_link_libraries(web PRIVATE Poco::Net Poco::PDF Poco::SQL 
Poco::XML)

, но потом я узнал, что этото, что происходит в командной строке

 /usr/bin/g++-7  -DPOCO_ENABLE_CPP14 -DPOCO_HAVE_FD_EPOLL - 
 DPOCO_STATIC -DPOCO_UNBUNDLED -D_DEBUG -D_FILE_OFFSET_BITS=64 - 
 D_LARGEFILE64_SOURCE -D_REENTRANT -D_THREAD_SAFE - 
 D_XOPEN_SOURCE=500 -isystem /home/pius/vcpkg/installed/x64- 
 linux/include -g   -std=gnu++17 -std=gnu++14 -MD -MT 
 CMakeFiles/web.dir/main.cpp.o -MF CMakeFiles/web.dir/main.cpp.o.d - 
 o

, как вы можете, POCO добавляет новое определение -DPOCO_ENABLE_CPP14 и передает по умолчанию -std=gnu++14 в gcc, поскольку мой код зависит от C ++ 17 string_view Iхочу C ++ 17, я попытался отредактировать мой файл CMake, чтобы он выглядел следующим образом

cmake_minimum_required(VERSION 3.8)
project(web)
find_package(Poco COMPONENTS Net Util PDF SQL XML REQUIRED)
add_executable(web "main.cpp")
set(CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_definitions(-std=gnu++17)
remove_definitions(-DPOCO_ENABLE_CPP14 -std=gnu++14)
target_link_libraries(web PRIVATE Poco::Net Poco::PDF Poco::SQL 
Poco::XML)

, но Cmake все еще генерирует тот же эффект, что и раньше, команда remove_definitions не работает, есть ли яМожно ли переписать требование по умолчанию, установленное POCO, и использовать вместо него свое?спасибо

Ответы [ 2 ]

2 голосов
/ 06 мая 2019

Так как вам требуется CMake 3.8 Вы должны использовать вместо:

target_compile_features(web PUBLIC cxx_std_17)

исй:
https://cmake.org/cmake/help/v3.8/manual/cmake-compile-features.7.html#requiring-language-standards
https://cmake.org/cmake/help/v3.8/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.html

1 голос
/ 05 мая 2019

Я наконец-то нашел решение, оказалось, что я не могу решить для своих зависимостей, но я могу решить для своего собственного проекта с

set_target_properties(web PROPERTIES CXX_STANDARD 17)
...