我写了一个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/