Прежде всего, если вы grep
для NDEBUG
в собственном R Makeconf
(к которому мы можем получить доступ через удобную программную ссылку из /etc/R
в Debian и его производных из-за того, как я установил пакет .deb):
edd@rob:~$ grep NDEBUG /etc/R/Makeconf
R_XTRA_CPPFLAGS = -I"$(R_INCLUDE_DIR)" -DNDEBUG
ALL_CPPFLAGS = -I"$(R_INCLUDE_DIR)" -DNDEBUG $(PKG_CPPFLAGS) $(CLINK_CPPFLAGS) $(CPPFLAGS)
edd@rob:~$
вы видите, что на ваш вопрос наложено R , а не Rcpp
.Так что ваше предположение было неверным.Он находится под вашим локальным управлением: просто отредактируйте R's Makeconf
на вашем аппарате.Вы просто не можете автоматизировать это для гипотетических других пользователей вашего кода.Но, на ваш вопрос, это все равно не вызывает непосредственного беспокойства.
Во-вторых, если вам нужен конкретный #define
, вы можете просто определить его:
Код
#include <Rcpp.h>
// [[Rcpp::export]]
void foo() {
#ifdef DEBUG
Rcpp::Rcout << "foo: Debug mode" << std::endl;
#endif
Rcpp::Rcout << "foo: Hello, world" << std::endl;
}
#define DEBUG 1
// [[Rcpp::export]]
void bar() {
#ifdef DEBUG
Rcpp::Rcout << "bar: Debug mode" << std::endl;
#endif
Rcpp::Rcout << "bar: Hello, world" << std::endl;
}
/*** R
foo()
bar()
*/
Вывод
R> sourceCpp("~/git/stackoverflow/56209693/answer.cpp")
R> foo()
foo: Hello, world
R> bar()
bar: Debug mode
bar: Hello, world
R>
Довольно часто определяют другие макросы журналирования, такие как DEBUG
или FATAL
или ..., которые ведут себя как assert, даже если R по умолчанию (и по понятным причинам, какв первую очередь интерактивный инструмент) отключает assert
.
Третий и последний, вы можете следовать подходу в этом вопросе и временно отменить определение NDEBUG
, чтобы включить cassert
, а затем переопределитьЭто.Это даст , даст вам assert()
и завершит ваш сеанс, как я проверил.Не мой подход к отладке с R, но эй, если ты действительно должен ...