Изменение CXXFLAGS в R CMD INSTALL для разработки пакетов R

Я пытаюсь отладить пакет, который я разрабатываю. Я использую makefile для сборки, проверки и установки пакетов. Пакеты представляют собой пакет Rcpp, поэтому в нем уже есть файлы makevars и makevars.win. То, что я ищу, - это изменить CXXFLAGS только для определенного правила make. Затем make debug запустит R CMD INSTALL с CXXFLAGS= -Wall -pedantic -g -O0", но обычный make install запустит с CXXFLAGS=-O3 без какой-либо отладочной информации. есть ли хороший способ динамически изменить это без необходимости изменять мой пакет, личные или системные файлы makevars?


person Andrew Redd    schedule 28.12.2011    source источник


Ответы (1)


Я так не думаю, так как есть только один CXXFLAGS. Но вы можете снова переназначить в разных целевых частях «сделать» и «сделать отладку».

Вы можете просто оставить две версии ~/.R/Makevars.normal и ~/R/Makevars.debug и использовать скрипт, чтобы перевернуть ссылку между ними...

За что это стоит. Я просто редактирую ~/.R/Makevars и комментирую/раскомментирую разные строки.

Редактировать: Как насчет чего-то подобного, основываясь на опубликованном вами Makefile:

install: $(PKG_NAME)_$(PKG_VERSION).tar.gz
    CXXFLAGS+="-O3" R CMD INSTALL $(PKG_NAME)_$(PKG_VERSION).tar.gz

debuginstall: $(PKG_NAME)_$(PKG_VERSION).tar.gz
    CXXFLAGS+="-Wall -g -O0" R CMD INSTALL $(PKG_NAME)_$(PKG_VERSION).tar.gz

Редактировать 2: я только что играл с этим, и это работает:

PKG_NAME=digest
PKG_VERSION=0.5.1

install: $(PKG_NAME)_$(PKG_VERSION).tar.gz
    PKG_CFLAGS="-O6" R CMD INSTALL $(PKG_NAME)_$(PKG_VERSION).tar.gz

debuginstall: $(PKG_NAME)_$(PKG_VERSION).tar.gz
    PKG_CFLAGS="-Wall -g -O0" R CMD INSTALL $(PKG_NAME)_$(PKG_VERSION).tar.gz

После этого он все еще считывает мои ~/.R/Makevars, поэтому здесь нельзя установить определенные переменные. Но вы можете просто установить MYDEBUG=... в своем Makefile, а затем использовать это внутри определения в ~/.R/Makevars.

person Dirk Eddelbuettel    schedule 28.12.2011
comment
как вы думаете, основная команда R поддержит идею разрешить что-то подобное? - person Andrew Redd; 29.12.2011
comment
Кроме того, нет ли способа использовать переменные среды или что-то в этом роде? - person Andrew Redd; 29.12.2011
comment
Вы также можете заставить его работать с переменными env; это основная make функция. - person Dirk Eddelbuettel; 29.12.2011
comment
правило debuginstall не работает. ошибки с /bin/sh: CXXFLAGS+= -Wall -pedantic -g -O0: not found Работает ли это в вашей системе? - person Andrew Redd; 29.12.2011
comment
Я стрелял от бедра, но я проделывал подобные трюки с Makefiles. Попробуйте без += и просто =. В противном случае назначьте MYCXXFLAGS и расширите его в Makefile до CXXFLAGS. Также рассмотрите PKG_CXXFLAGS. - person Dirk Eddelbuettel; 29.12.2011
comment
Думаю с моей стороны. Вы не можете назначать в той же строке, что и в оболочке, вам нужно сделать это в строке выше. Или просто набросайте и определите shellwrapper RcmdInstallDbg и RcmdInstall.... - person Dirk Eddelbuettel; 29.12.2011
comment
Я не уверен, о чем был последний комментарий, потому что он работал так, как в вашем посте. Спасибо. - person Andrew Redd; 29.12.2011