2016-07-11 6 views
1

C/C++コードを含むRパッケージをビルドしました。私は今このパッケージをwin-builderでテストしようとしています。残念ながら、次のエラーが00install.outに返されます。win-builderでgccが見つかりません

* installing *source* package 'mypackage' ... 
** libs 
    running 'src/Makefile.win' ... 
/usr/bin/make --directory=lib/mylib/ 
gcc -g -Wall -fPIC -c mycode.c 
make[1]: gcc: Command not found 
make[1]: *** [mycode.o] Error 127 
make: *** [mylib] Error 2 
Warning: running command 'make --no-print-directory -f "Makefile.win"' had status 2 
ERROR: compilation failed for package 'mypackage' 
* removing 'd:/RCompile/CRANguest/R-release/lib/mypackage' 

gccgcc.exe、およびccにしようと、同様の結果が得られました。

したがって、私はthese instructionsに従ってWindows仮想マシン上にテスト環境をセットアップしました。この環境内でコマンドラインからコードR CMD INSTALL .を実行すると、コードのコンパイルやパッケージのインストールが問題なく行われました。 (R CMD build .を実行してもエラーは発生しません)

win-builderとは何ですか?また、どのようにしてコンパイルすることができますか?

また、win-builderで動作していたかどうかにかかわらず、Windowsでパッケージを十分にビルドできるようになっていますか?

次のように私のMakefile.winがある:

export CCOMP = gcc 
export CPPCOMP = c++ 
export ADD_CC_FLAGS = -O3 
APP_DIR = ./apps/myapp 
LIB_DIR = ./lib/mylib 

.PHONY: all $(APP_DIR) $(LIB_DIR) 

all: $(APP_DIR) $(LIB_DIR) 

$(APP_DIR) $(LIB_DIR): mylib 
    $(MAKE) [email protected] 

$(APP_DIR): $(LIB_DIR) mylib 

mylib: 
    $(MAKE) --directory=lib/mylib 

mylib目標の下でメイクファイルにecho %PATH%の挿入が得られた:ファイルMakefile.winが含まれているため

Makefile.win:24: *** missing separator. Stop. 
+0

あなたのMakefile.winのコンテンツを含めることができますか? – nrussell

+0

@nrussell:追加されました。 – Richard

答えて

3

現在地あいまいなエラーが発生します。

しかし、このようなファイルが見つかった場合はではありません。ここで何をしたいのですか? Rは、独自のMakefile.winを構築し、あなただけ含まれるスニペットを供給することになっている - Makevars.win呼び出さなければなりません。

これはルール番号1です。ルール番号2には、Makefileに含めるすべての資料は含まれていません。Rが既にテーブルにもたらすものを壊すためです。これはすべてにありますが、Rの拡張子を書くことはですが、当然のことながらもっと明確になるでしょう。

私の実用的な提案:あなたが知っているようなパッケージをとり、Rビルドがうまくいっているものをwin-builderで作り、それを修正してください。あなたはRtoolsなど、PPとRシステムへのアクセス権を持っている必要があり、ローカルにテストすることができます


編集をOPから:私はいくつかのライブラリに依存していた実行可能ファイルをコンパイルするのに必要な

。ライブラリコードはsrc/libsで、実行可能ファイルのコードはsrc/appsでした。各サブディレクトリ内でmakeを実行し、src/apps/Makefileを設定して、相対パスを使用してsrc/libsの結果を取得するようにしました。その後、唯一の問題はチェーン全体を稼動させることでした。そうするために、私は次のような構造を持っていたファイルsrc/Makevars.win作成:

.PHONY: all myprogram sublib1 sublib2 

all: sublib1 sublib2 myprogram 

myprogram: sublib1 sublib2 
    @(cd apps/myprogram && $(MAKE) CXX="$(CXX)" CC="$(CC)" CFLAGS="$(CFLAGS) $(CPICFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)") 

sublib1: 
    @(cd lib/sublib1 && $(MAKE) CXX="$(CXX)" CC="$(CC)" CFLAGS="$(CFLAGS) $(CPICFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)") 

sublib2: 
    @(cd lib/sublib2 && $(MAKE) CXX="$(CXX)" CC="$(CC)" CFLAGS="$(CFLAGS) $(CPICFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)") 

を私はそれを理解し、Makevars.winはRが生成する動的に生成Makefileに埋め込まれます。したがって、$(CC)は実際にこの隠しコードを参照しています。

+0

ありがとうございます。実際には* R拡張機能の記述*がより明確になる可能性があります。私が好きな別のパッケージ( 'dplyr')を見てきました。コードは私のものよりかなり単純です。私の 'makefile'は6つの異なるサブディレクトリを再帰的に呼び出します。サブディレクトリは独自のmakefileを持っています。これらは静的ライブラリを生成し、実行可能ファイルにアセンブルされます。私は 'Makevars'でそれをどのように捉えるのかは分かりませんが、それはおそらく別の質問です。 – Richard

+0

難しいです。パッケージによってはこれを行うものもあれば、 'configure'と' configure.win'にこれを組み立てるものもあります。 –

+0

[このリンク](http://www.hep.by/gnu/r-patched/r-exts/R-exts_14.html#SEC14)を読んでください。 – Richard

関連する問題