R中沒有掛鉤:在安裝過程中執行代碼。
但是,有一整套掛鉤用於包裝或附件。我經常爲此使用.onLoad()
。見,例如如何RcppGSL會記住鏈接器和編譯標誌使用 - 從R/inline.R
:
.pkgglobalenv <- new.env(parent=emptyenv())
.onLoad <- function(libname, pkgname) {
if (.Platform$OS.type=="windows") {
LIB_GSL <- Sys.getenv("LIB_GSL")
gsl_cflags <- sprintf("-I%s/include", LIB_GSL)
gsl_libs <- sprintf("-L%s/lib -lgsl -lgslcblas", LIB_GSL)
} else {
gsl_cflags <- system("gsl-config --cflags" , intern = TRUE)
gsl_libs <- system("gsl-config --libs" , intern = TRUE)
}
assign("gsl_cflags", gsl_cflags, envir=.pkgglobalenv)
assign("gsl_libs", gsl_libs, envir=.pkgglobalenv)
}
接下來在這個文件中是如何使用它們:
LdFlags <- function(print = TRUE) {
if (print) cat(.pkgglobalenv$gsl_libs) else .pkgglobalenv$gsl_libs
}
CFlags <- function(print = TRUE) {
if (print) cat(.pkgglobalenv$gsl_cflags) else .pkgglobalenv$gsl_cflags
}
你知道,如果有計劃解決這一問題?據我所知,我知道'.onLoad'掛鉤無法彌補安裝後掛鉤的情況(我的軟件包需要安裝本身不屬於軟件包的命令行工具)。 –
我不這樣做,但我也可以在構建過程中使用鉤子(例如,在構建過程中調用'roxygen()'或'Rcpp :: compileAttributes()')以及構建之後,比如說安裝' r')。不知道它是否會發生。當你堅持規避/避免R Core可能沒有那麼多同情的包裝系統時,你有更難做的事情...... –
是的,我意識到這一點。 ;-) –