c++ - 在 Rcpp Makevars 中找到系统范围的库

标签 c++ r cmake

我写了一个C++包“P”。它有一个 R 接口(interface)包“RP”,使用 Rcpp 构建。 P 直接使用 Make 进行编译,但为了可移植性而切换到 CMake。 CMake 用于查找系统范围库的 header (我们称其为 HF 集合)和静态库(本文其余部分中的 SL)。

我想更新RP使其能够依赖于P的CMake进化。在C++源代码RP/src/*.cpp中,包含了HF元素,当然SL是静态的链接。

RP/src/Makevars 中调用 CMake 以检索 HF 和 SL 位置的最佳方法是什么?这里的重点不是取代 Rcpp 的构建系统,而是利用 CMake 的搜索功能。

目前,P(CMake 版本)和 RP 在我的机器上构建,在 RP/src/Makevars 中使用绝对路径引用,例如:

INC_NLOPT = /usr/local/Cellar/nlopt/2.4.2_2/include
LIB_NLOPT = /usr/local/Cellar/nlopt/2.4.2_2/lib/libnlopt.a

由于我们目前在内部使用 RP,我们可以预期在我们将部署到的每台机器上安装 CMake、HF 和 SL。

最佳答案

解决方案是在 RP/src 中创建一个 CMakeFileLists.txt 文件。在此文件中,包含所需库路径的 Libvar 文件是使用 CMake file 命令编写的。 Libvar 然后使用 include 包含在 Makevars 中。

执行包根目录下的配置文件,以确保在 R 每次调用之前生成 Libvar

关于c++ - 在 Rcpp Makevars 中找到系统范围的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50289360/

相关文章:

r - 在 metafor 中为漏斗图点创建标签

r - R从一个数据框中选择所有未出现在另一行中的行

cmake - 仅在 CPack 中将文件添加到 ARCHIVE 包

c++ - 快速 TS 片段 ffmpeg 解码 - 内存泄漏

c++ - 我应该有一个分配器作为我的类中的成员变量吗?

r - 如何使用 2 个不同的 y 轴进行绘图?

Cmake 构建类型(RELEASE、DEBUG 等)编译器标志

c++ - 模板类转换错误

C++ 线程安全映射

CMake 找不到 VTKConfig.cmake