Boost_NO_SYSTEM_PATHS не распознан - PullRequest
0 голосов
/ 28 февраля 2020

Я не могу заставить CMake (3.16.4) и boost работать вместе, как они должны.

В моей системе установлен boost (v1.72), и я скомпилировал другую версию, например:

wget https://dl.bintray.com/boostorg/release/1.71.0/source/boost_1_71_0.tar.gz
tar -xf boost_1_71_0.tar.gz
cd boost_1_71_0 && ./bootstrap.sh && ./b2 --prefix=../external/boost_1_71_0 --with-timer install 

У меня есть простая тестовая программа, использующая таймер повышения:

#include <iostream>

int main()
{
    boost::timer::auto_cpu_timer t;
    std::cout << "Hello Timer" << std::endl;

    return 0;
}

И это CMakeLists.txt:

cmake_minimum_required(VERSION 3.16.4)

Project(CmakeBoostText)

set(Boost_DEBUG 1)
set(Boost_NO_SYSTEM_PATHS ON)
set(BOOST_ROOT ../external/boost_1_71_0)
find_package(Boost 1.71 REQUIRED COMPONENTS timer)

add_executable(main main.cpp)

target_link_libraries(main Boost::timer)

Затем я пытаюсь скомпилировать мой тестовый двоичный файл:

rm -rf build/* && cmake -S . -B build && cmake --build build

В выводе ясно видно, что он использует системный вариант наддува:

-- [ /usr/share/cmake-3.16/Modules/FindBoost.cmake:1468 ] Boost_NO_SYSTEM_PATHS = "ON"
-- [ /usr/share/cmake-3.16/Modules/FindBoost.cmake:1537 ] BOOST_ROOT = "../external/boost_1_71_0"
[...]
Found Boost: /usr/lib64/cmake/Boost-1.72.0/BoostConfig.cmake (found suitable version "1.72.0", minimum required is "1.71") found components: timer

Используя ldd, я также могу проверить, что двоичный файл связан с системой. библиотека boost.

Это довольно странно. Согласно документации в cmake / find_package, Boost_NO_SYSTEM_PATHS должен обработать это.

Если я затем изменю find_package, чтобы включить 'EXACT', он внезапно работает (он находит и использует правильную версию. Но я считаю, что это быть большим взломом.

find_package(Boost 1.71 EXACT REQUIRED COMPONENTS timer)

Почему это не работает без EXACT? Разъяснения приветствуются.

Примечание: я не хочу использовать что-либо, связанное с include_directories(). обходные пути выходят за рамки.

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