Я нахожусь в Mac OS X со следующим CMake-файлом и Boost v1.58.0, установленным в/usr/local/lib/boost_1_58_0, и каждый раз, когда я запускаю cmake, он печатает «Не мог найти Увеличение". Я прочитал каждый пост переполнения стека, я могу о том, как это сделать, и ничего не сработало. Есть что-то, что я просто пропустил?Cmake не может найти форматированную библиотеку
cmake_minimum_required (VERSION 3.1)
project (HelloWorld)
set (CMAKE_CXX_FLAGS "--std=gnu++11 ${CMAKE_C_FLAGS}")
file (GLOB SOURCE_FILES "source/*.cpp")
set (CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} /usr/local/lib/boost_1_58_0/boost)
set (CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} /usr/local/lib/boost_1_58_0/stage/lib)
set (Boost_NO_BOOST_CMAKE ON)
set (BOOST_NO_SYSTEM_PATHS ON)
set (BOOST_ROOT /usr/local/lib/boost_1_58_0)
set (BOOST_INCLUDEDIR /usr/local/lib/boost_1_58_0/boost)
set (BOOST_LIBRARYDIR /usr/local/lib/boost_1_58_0/stage/lib)
set (Boost_USE_STATIC_LIBS OFF)
set (Boost_USE_MULTITHREADED ON)
set (Boost_USE_STATIC_RUNTIME OFF)
find_package (Boost 1.58.0 COMPONENTS optional)
if (Boost_FOUND)
include_directories (${Boost_INCLUDE_DIRS})
target_link_libraries (helloworld ${Boost_LIBRARIES})
endif()
include_directories ("source")
add_executable (helloworld ${SOURCE_FILES})
Выяснил это. Необязательно, на самом деле это не библиотека, потому что это только заголовок. – embooglement
Стилистическая и переносимая точка: вы не должны определять какие-либо системные элементы, такие как BOOST_ROOT, BOOST_INCLUDEDIR и BOOST_LIBRARYDIR в вашем файле CMakeLists.txt. Если вам нужно установить их, сделайте это в командной строке с -D. Вся первая надстрочная строфа может быть опущена, так же как и команды набора путей включения и библиотеки - используйте include_directories ($ {Boost_INCLUDE_DIRS}) . –
Дополнительный комментарий к переносимости: вы используете --std = gnu ++ 11, но CMake предлагает компилировать функции для включения любого поддерживаемого компилятора в соответствующий режим. Кроме того, не добавляйте флаги * C * к флагам * CXX *. Кроме того, target_link_libraries действительно должны появляться * после * add_executable, так как цель не существует на данный момент. –