Tôi có gói R mà tôi đã chuyển một thuật toán MCMC chứa đại số ma trận sang C++
bằng gói RcppEigen
giúp cải thiện đáng kể tốc độ.Làm cách nào để cải thiện tệp Makevars cho gói Rcpp (RcppEigen)?
Tuy nhiên, R CMD check
cung cấp cho các NOTE
sau trên Linux (Thanks to R-Forge):
* checking installed package size ... NOTE
installed size is 6.6Mb
sub-directories of 1Mb or more:
libs 6.1Mb
Cảnh báo này có lẽ không phải do kích thước đáng kinh ngạc của tôi C++ mã (which is only around 150 lines), vì nó chỉ xuất hiện trên Linux, nhưng có lẽ do tôi không có khả năng cấu hình chính xác tệp Makevars
. (Tôi chưa từng sử dụng make
hoặc makefile
trước đây).
Ngoài ra khi gửi gói tới CRAN
, Brian Ripley đã viết một điều gì đó về việc này NOTE
khiến tôi mong đợi đó là sự cố Makevars
: "Nó đến từ biểu tượng gỡ lỗi".
My Makevars
là tiêu chuẩn Rcpp
Makevars
(dưới đây) được sản xuất bởi Rcpp.package.skeleton
.
Câu hỏi của tôi:
- Làm thế nào tôi có thể cấu hình của tôi
Makevars
trong một cách mà làm giảm kích thước của thư viện biên soạn trên Linux (ví dụ: thoát khỏiNOTE
)? - Tài nguyên nào tốt để tìm hiểu về ma thuật
Makevars
choRcpp
?
(tôi không tìm thấy bất cứ điều gì trong Gallery và R extension manual on this cũng là khó hiểu với tôi)
tôi Makevars
:
## Use the R_HOME indirection to support installations of multiple R version
PKG_LIBS = `$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"`
PKG_CPPFLAGS = -I. -I../inst/include
tôi Makevars.win
:
## This assume that we can call Rscript to ask Rcpp about its locations
## Use the R_HOME indirection to support installations of multiple R version
PKG_LIBS = $(shell $(R_HOME)/bin/Rscript.exe -e "Rcpp:::LdFlags()")
PKG_CPPFLAGS = -I. -I../inst/include
Cảm ơn đã phản ứng, chỉ cần làm rõ: Những gì bạn đang nói về cơ bản là (a) có thực sự là không có vấn đề, kích thước xuất phát từ cấu trúc của 'Eigen', (b) không có cờ 'CXXFLAGS' được đề xuất nào để đặt cho 'RcppEigen' và (c) nếu bạn muốn thay đổi cờ đi và tìm hiểu cú pháp Makefile _basic và tùy chọn_. Tôi có hiểu bạn đúng không? – Henrik
Có đến a) và c); chúng tôi nói những gì bạn cần trong b) và cung cấp cho bạn; xem các tài liệu, ví dụ và bộ khung của RcppEigen - nhưng về bản chất bạn chỉ cần LinkingTo: RcppEigen. Bạn sử dụng RcppEigen, và không tách riêng bản sao của Eigen, phải không? –
Vâng, tôi sử dụng 'RcppEigen' và có lẽ tôi đã sử dụng' RcppEigen.package.sk '(như tôi có 'RcppEigen' trước' Rcpp' trên cả hai Depends và LinkingTo trong 'DESCRIPTION'). Câu hỏi của tôi có lẽ là nếu có ý nghĩa để đặt ví dụ: tùy chọn '-O3' nổi tiếng (và nếu vậy, làm thế nào)? – Henrik