Я пытаюсь связать проект C ++ с библиотекой RCpp;файл называется Rcpp.so
, а не linux-default libRcpp.so
.Кроме того, библиотека находится в нестандартном месте /usr/lib/R/site-library/Rcpp/libs
.
Поэтому я попытался использовать комбинацию find_library
и target_link_libraries
:
cmake_minimum_required(VERSION 3.8)
project("R-Tests")
find_library(RCPP
NAMES Rcpp.so
HINTS /usr/lib/R/site-library/Rcpp/libs
)
if (NOT RCPP)
message(FATAL_ERROR "Could not find Rcpp - exiting.")
else()
message("Found Rcpp: " ${RCPP})
endif()
# test target
add_executable(rcpptest main.cpp)
target_link_libraries(rcpptest ${RCPP})
Конфигурирование работает отлично, CMakeвыводит:
Found Rcpp: /usr/lib/R/site-library/Rcpp/libs/Rcpp.so
Однако во время сборки CMake передает компилятору -lRcpp
, что приводит к сбою компиляции, поскольку файл библиотеки не называется libRcpp.so
, а вместо Rcpp.so
:
[100%] Linking CXX executable rcpptest
/usr/bin/cmake -E cmake_link_script CMakeFiles/rcpptest.dir/link.txt --verbose=1
c++ CMakeFiles/rcpptest.dir/main.cpp.o -o rcpptest -L/usr/lib/R/site-library/Rcpp/libs -Wl,-rpath,/usr/lib/R/site-library/Rcpp/libs -lRcpp
/usr/bin/ld: cannot find -lRcpp
collect2: error: ld returned 1 exit status
Так как в строке message
печатается полный путь к файлу Rcpp.so
, есть ли способ разрешить target_link_libraries
просто добавить этот путь в компилятор вместо комбинации -L
и -l
?
Согласно этот вопрос , его следует отключить, добавив cmake_policy(SET CMP0060 NEW)
;Тем не менее, я не вижу никаких изменений в поведении CMake, если я установлю это NEW
или OLD
.