CMake Ошибка в FindPackageHandleStandardArgs.cmake: 137 (сообщение): НЕ удалось найти Boost (отсутствует: регулярное выражение) (найдена подходящая версия "1.72.0", - PullRequest
0 голосов
/ 16 февраля 2020

Я загрузил файл boost_1_72_0.tar.gz с официального сайта и разархивировал его в папку загрузок по адресу /USERS/macuser/Downloads/boost_1_72_0

При попытке связать простой файл. cpp с Boost :: regex

-- The C compiler identification is AppleClang 11.0.0.11000033
-- The CXX compiler identification is AppleClang 11.0.0.11000033
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Warning at /usr/local/Cellar/cmake/3.15.4/share/cmake/Modules/FindBoost.cmake:1144 (message):
  New Boost version may have incorrect or missing dependencies and imported
  targets
Call Stack (most recent call first):
  /usr/local/Cellar/cmake/3.15.4/share/cmake/Modules/FindBoost.cmake:1266 (_Boost_COMPONENT_DEPENDENCIES)
  /usr/local/Cellar/cmake/3.15.4/share/cmake/Modules/FindBoost.cmake:1904 (_Boost_MISSING_DEPENDENCIES)
  examples/HelloBoost/CMakeLists.txt:27 (find_package)


CMake Error at /usr/local/Cellar/cmake/3.15.4/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find Boost (missing: regex) (found suitable version "1.72.0",
  minimum required is "1.72.0")
Call Stack (most recent call first):
  /usr/local/Cellar/cmake/3.15.4/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
  /usr/local/Cellar/cmake/3.15.4/share/cmake/Modules/FindBoost.cmake:2161 (find_package_handle_standard_args)
  examples/HelloBoost/CMakeLists.txt:27 (find_package)

Мой файл CMakeLists.txt выглядит следующим образом:

cmake_minimum_required(VERSION 3.1)

set (CMAKE_CXX_STANDARD 11)
set (PROJECT "Hello-Boost")

# headers
include_directories(include)

# sources
file(GLOB SOURCES "src/*.cpp")


# BOOST Configuration

set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)

set(Boost_INCLUDE_DIR /USERS/macuser/Downloads/boost_1_72_0/boost)
set(Boost_LIBRARY_DIR /USERS/macuser/Downloads/boost_1_72_0/libs)

find_package(Boost 1.72.0 COMPONENTS regex REQUIRED)

if(Boost_FOUND)
    message("boost lib: ${Boost_LIBRARIES}")
    message("boost inc:${Boost_INCLUDE_DIR}")
emdif()

include_directories(${Boost_INCLUDE_DIR})
link_directories(${Boost_LIBRARY_DIR})

# executable target
add_executable(${PROJECT} ${SOURCES})

# link boost
target_link_libraries(${PROJECT} PUBLIC Boost::regex)

Мой вопрос прост:
Что, во имя Бога, не так с Cmake? Почему на Земле она не может найти чертову поддержку, когда миллионы других людей успешно сделали это?

Спасибо

1 Ответ

0 голосов
/ 16 февраля 2020

Перед использованием Boost::regex вам необходимо собрать Boost, потому что это не только библиотека заголовков (как и большинство других библиотек Boost). Обычно это делается во время установки через менеджер пакетов, такой как homebrew или macports.

Библиотеки только с заголовками не нужно добавлять в раздел COMPONENTS вашего find_package вызова.

Затем вы делаете

find_package(BOOST 1.72.0 COMPONENTS regex REQUIRED)

, как вы уже сделали, и позже добавляете библиотеки к своей цели либо

target_link_libraries(${PROJECT} PUBLIC Boost::regex)

Если вы собираетесь использовать другие библиотеки Boost позже (только заголовок или нет) Вы должны либо явно указать их имя в вызове target_link_libraries, либо добавить

target_link_libraries(${PROJECT} PUBLIC ${Boost_LIBRARIES})

Это также добавит каталог Boost в ваши каталоги включения. Затем вы можете опустить следующие строки

include_directories(${Boost_INCLUDE_DIR})
link_directories(${Boost_LIBRARY_DIR})

Если вы предпочитаете использовать библиотеки stati c вместо динамических c, используйте

set(Boost_USE_STATIC_LIBS ON) 

перед вашим find_package звонок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...