CMake не добавляет библиотеки зависимостей в файлы проекта - PullRequest
0 голосов
/ 31 января 2019

Я пишу простой пример кода, используя pcl, как ссылку http://pointclouds.org/documentation/tutorials/writing_pcd.php.

Несмотря на то, что я перехожу по ссылке, Visual Studio сообщает об ошибках ссылки.Причина в том, что pcl зависит от библиотеки boost, а cmake не добавляет библиотеку boost в файлы настроек проекта visual studio.Если я добавлю библиотеку надстроек следующей строкой, все будет в порядке.

target_link_libraries (progname $ {Boost_LIBRARIES})

Почему CMake не справится с этим?Есть ли лучшее решение?

CMake: 3.13.2,

Visual studio: Community 2017

PCL: PCL-1.9.1-AllInOne-msvc2017-win64.exe

Редактировать: CMakeLists.txt

cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
project(MY_GRAND_PROJECT)
set(Boost_DEBUG ON)

set(Boost_USE_STATIC_LIBS OFF) 
set(Boost_USE_MULTITHREADED ON)  
set(Boost_USE_STATIC_RUNTIME OFF) 
find_package(Boost 1.45.0) 

find_package(PCL 1.9.1 REQUIRED COMPONENTS common io)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable(pcd_write_test pcd_write.cpp)
target_link_libraries(pcd_write_test ${PCL_COMMON_LIBRARIES} ${PCL_IO_LIBRARIES}  ${Boost_LIBRARIES})

1 Ответ

0 голосов
/ 01 февраля 2019

Согласно сценарию PCLConfig.cmake в официальном репо, библиотеки Boost добавляются к переменной PCL_LIBRARIES.(Это выполняется ближе к концу скрипта).

Таким образом, для автоматической связи с библиотеками Boost при использовании PCL вам необходимо использовать переменную PCL_LIBRARIES для связывания, а не PCL_<comp>_LIBRARIES переменные.


Я не знаю, предназначено ли данное поведение или нет.Если вы предполагаете, что библиотеки Boost должны быть частью PCL_<comp>_LIBRARIES переменных, то вы можете заполнить отчет об ошибке.

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