2012-06-06 17 views
5

Czy można ustawić flagi R C i C++ w czasie kompilacji podczas instalacji z R CMD INSTALL (zasadniczo, w tym konkretnym przypadku chcę wyłączyć optymalizację kompilatora, ale najlepiej jest ogólne rozwiązanie)?Flagi kompilacji C z R

Wiem, że możesz wpłynąć na niektóre opcje przy użyciu --configure-args="...", a ja raczej optymistycznie wypróbowałem --configure-args="diable-optimization", bezskutecznie. Podobnie, mogę również edytować $RHOME/etc/Makeconf, ale znowu nie jest to rodzaj rozwiązania, którego szukam (i nie jest możliwe tam, gdzie nie mam odpowiedniego pozwolenia na zapis).

Definiuję moje flagi za pomocą skryptu autoconf oraz z plikiem Makevars w katalogu package/src, jeśli ma to jakiekolwiek znaczenie.

Odpowiedz

4

Tak, używam do tego pliku ~/.R/Makevars. Również przydatny do ustawiania CC i CXX do różnych kompilatorów kiedy, powiedzmy, przełączanie wersje GCC, lub przejście na LLVM, albo ...

+1

To idealny - ale po utworzeniu '~/.R plik/Makevars', jak można dostać R używać tych zmiennych w czasie kompilacji? – Alex

+1

Jest automatyczne, gdy używasz 'R CMD ...'. –

+0

Widzisz, bałem się, że to powiesz. Czy potrzebuję czegoś specjalnego w moim skrypcie configure.ac, aby to działało? – Alex

4

Dirk - bardzo pomocne dyskusja (jak zawsze) i zdecydowanie wskazał mnie we właściwym kierunku. Dla mojego konkretnego problemu okazało się, że oprócz pliku Makevars musiałem przekazać argumenty do configure. Nie mam pojęcia, dlaczego tak się dzieje (i czytanie nie wydaje się być normą, więc może gdzieś coś zrobiłem źle), ale jeśli ktoś inny ma ten sam problem, używając ~/R/Makevars w połączeniu z następującymi argumentami dla configure/INSTALL pracował dla mnie.

R CMD INSTALL --configure-args="CFLAGS=-g CXXFLAGS=-g" package.tar.gz 
+0

Masz na myśli ~/.R/Makevars? Tego potrzebujesz. –

1

Mogę potwierdzić, że plik Makevars jest bardzo przydatne (szczególnie jeśli trzeba użyć „-l/moje/libs” lub „-I/mojego/obejmuje”, lub inni zbudować flagi).

Na kompilacji, jeśli chcesz ustawić opcję na stronie/urządzeniu, można również zmienić zmienne w Makeconf pliku (/ ścieżka/R/install/[lib64/R /] etc/Makeconf) .

Jeśli jednak, tak jak ja, nadal masz problemy z późniejszym zarządzaniem i używaniem bibliotek, możesz także ustawić biblioteki przy pomocy pliku ldpaths [1]. Ten plik zawiera zmienną R_LD_LIBRARY_PATH używaną przez R. Ta zmienna jest odpowiednikiem dobrze znanej LD_LIBRARY_PATH na unixie [2].

Właśnie dodałem pewne treści (tuż przed komentarzem na MacOS/Darwin) do tego pliku (/ ścieżka/R/install/[lib64/R /] etc/ldpaths):

if test -n "${LD_LIBRARY_PATH}"; then 
    R_LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${R_LD_LIBRARY_PATH}" 
fi 
## This is DYLD_FALLBACK_LIBRARY_PATH on Darwin (OS X) and 

Następnie będziesz w stanie dynamicznie zarządzać bibliotekami np. używając "modułów środowiskowych" lub "lmod".

Zauważ, że możesz zmienić wiele innych zmiennych środowiskowych i R z całym plikiem, który znajduje się w tym katalogu config/etc (Renviron, repozytoria, javaconf, Rprofile.site ...).

[1] https://support.rstudio.com/hc/en-us/community/posts/200645248-Setting-up-LD-LIBRARY-PATH-for-a-rsession

[2] http://www.tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html