У меня есть этот автономный код на С++ что я пытаюсь обернуть R пакет.
Моя проблема в том, что я абсолютно
хотите, чтобы он был скомпилирован с помощью
-O3
флаг включен.
Итак, в файле src/Makevars
Я положил:
PKG_CPPFLAGS = -I../inst/include
PKG_CXXFLAGS = -O3
CXX_STD = CXX11
и все еще, когда я устанавливаю свой пакет на моем машина, я вижу:
g++ -std=c++0x -I/usr/share/R/include -DNDEBUG -I../inst/include -O3 -fpic -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -D_FORTIFY_SOURCE=2 -g -c mycppfunctions.cpp -o mycppfunctions.o
g++ -std=c++0x -shared -Wl,-Bsymbolic-functions -Wl,-z,relro -o mycppfunctions.so mycppfunctions.o -L/usr/lib/R/lib -lR
(страшный флаг -O2
отображается справа)
поэтому мой вопрос: как я могу перезаписать
флагов cpp, когда g++
вызывается R CMD
?
Изменить:
Недавно, в другом пакете, я нашел способ сделать
что-то похожее на код F77 (также в пакете R).
В основном, добавив это к Makevars
:
PKG_FFLAGS = $(FPICFLAGS) $(SHLIB_FFLAGS)
all: $(SHLIB)
otherf77foo.o: otherf77foo.f
$(F77) $(PGK_FFLAGS) -O3 -pipe -g -c -o otherf77foo.o otherf77foo.f
но я не знаю, как сделать то же самое для кода cpp...
Edit2:
Итак, делать это вполне возможно. Dirk Eddelbuettel вопрос 'b)' из его ответа ниже
направил меня к решению. Итак, все, что мне нужно было сделать, это
поместите это в файл src/Makevars
:
mycppfoo.o: mycppfoo.cpp
g++ -std=c++0x -I/usr/share/R/include -DNDEBUG -I../inst/include -fpic -g -O3 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -D_FORTIFY_SOURCE=2 -g -c mycppfoo.cpp -o mycppfoo.o
g++ -std=c++0x -shared -Wl,-Bsymbolic-functions -Wl,-z,relro -o mycppfoo.so mycppfoo.o -L/usr/lib/R/lib -lR
и моя проблема была решена!