3

R に .edf ファイルをインポートするためのサードパーティ (クローズド ソース) API を使用する R パッケージを作成しています (SR Research Eyelink アイ トラッカーから)。これを Linux で動作させた人がコードを共有してくれたので、Mac でも動作させることができました。Mac にインストールされている API を指すように src/Makevars ファイルを変更するだけの問題でした。

PKG_LIBS=-framework edfapi -F/Library/Frameworks/

Linux で動作させるには、Makevars に次のものが必要です。

PKG_LIBS=-L/usr/local/lib -ledfapi -lm

Windows 固有のオプションについては、Makevars.win ファイルを作成する必要があることはわかっていますが、Mac と Linux でビルド オプションを変更するにはどうすればよいですか? 私は次のようなことをしたいと思います:

if [[ `uname` -eq Darwin ]] ; then

  PKG_LIBS=-framework edfapi -F/Library/Frameworks/

fi

if [[ `uname` -eq Linux ]] ;then

  PKG_LIBS=-L/usr/local/lib -ledfapi -lm

fi

しかし、これを Makevars に入れてもうまくいきません。configureこれを調査したところ、との設定オプションの組み合わせが必要なようですが、Makevarsよくわかりませんでした。私は R プログラミングに慣れており、いくつかの基本的な関数を作成するのに十分な C++ を知っていますが、構築プロセスに含まれるすべてのニュアンスをまだ理解していません。誰かがconfigure/configure.ac対の主な目的を説明できれば、Makevars/Makevars.inそれも役に立ちます。

理想的には、API を R パッケージと一緒にバンドルし、プラットフォーム固有のフォルダーにさまざまなバージョンを配置したいと考えています。API は、わずか 3 つのヘッダー ファイルと 1 つのバイナリで構成されています (ほとんど変更されません)。これにより、パッケージをCRANに配置できなくなることはわかっていますが、それで問題ありません。別のフォルダーにある API ファイルを使用してパッケージを正常にビルドできましたが、実行時には標準の場所 (/Library/Frameworks) でパッケージを検索します。これはより負荷の高い質問であり、別の投稿を作成することもできます.

4

1 に答える 1

1

この投稿は、私がそれを理解するのに役立ちました:stackoverflow.com/a/32590600/1457051

configure (パッケージのルート ディレクトリ内) は次のようになります。

#!/bin/bash

#make the Makevars file
if [ ! -e "./src/Makevars" ]; then
touch ./src/Makevars
fi

#if mac
if [[ `uname` -eq Darwin ]] ; then

echo "PKG_LIBS=-framework edfapi -F/Library/Frameworks/" > ./src/Makevars
#if linux
elif [[ `uname` -eq Linux ]] ;then

echo "PKG_LIBS=-L/usr/local/lib -ledfapi -lm" > ./src/Makevars

fi

Makevars が作成され、プラットフォームに基づいて適切なオプションが追加されます。より直接的な解決策があるかもしれませんが、これは私の目的に適しています。

于 2015-09-30T23:45:40.313 に答える