初心者です。
ネットでMakefileの作り方を色々と参照してMakefileを解読しているのですが、
Makefileを作るためのスクリプトの読み方がよく分かっていません。
Make特有のマクロ定義があるとかPowerShellのルールがあるとか
自分なりに調べたのですが、具体的なスクリプトとなると読めなくなってしまい・・・
いくつか教えていただけないでしょうか。
※以下のスクリプトは抜粋しています。
C++
1##スクリプト① 2R_HOME := $(shell R RHOME) 3 4RCPPFLAGS := $(shell $(R_HOME)/bin/R CMD config --cppflags) 5RCPPINCL := $(shell echo 'Rcpp:::CxxFlags()' | $(R_HOME)/bin/R --vanilla --slave) 6 7CXXFLAGS := $(RCPPFLAGS) $(RCPPINCL)
C++
1##スクリプト② 2R_HOME = $$system(R RHOME) 3 4RCPPFLAGS = $$system($$R_HOME/bin/R CMD config --cppflags) 5RCPPINCL = $$system($$R_HOME/bin/Rscript -e \'Rcpp:::CxxFlags\(\)\') 6 7CXXFLAGS := $(RCPPFLAGS) $(RCPPINCL)
【1】上記2つのスクリプトについて
似たようなスクリプトが2つ検索で見つかったのですが(スクリプト①とスクリプト②、以下①②と記述。)
①はshellと書かれていて、②はsystemと書かれているのですが、違いがあるのでしょうか。
shellが書かれた①は、.NETをインストールしていないと動かないとか?
【2】「$」の使い方
makefileの中ではマクロの引用に$()を使うとかまでは調べたのですが(でもよく分かっていない)、
②では$$とドルマークを2重で使っています。これは何ですか。
$そのものを使いたいときは$$にするとか??
【3】「:=」と「=」
①では「:=」が使われていて、②では「=」が使われています。
これも何か違いや意味があるのでしょうか。
【4】systemの使い方1
R_HOME = $$system(R RHOME)でRとRHOMEをsystemに渡しているようなのですが、
system関数はcmd.exeに引数のstring型文字列を渡してソフトを実行させるとありました。
RとRHOMEって実行ファイルでもなさそうなのですが、内部ではどう認識されているのでしょうか。環境変数の何か?とアタリを付けたのですが、自分で分かる範囲はここまででした。
手元の本にもsystemについての解説がなく、これは何?という状態です。
【5】systemの使い方2
RCPPFLAGS = $$system($$R_HOME/bin/R CMD config --cppflags)
とあり、どこかのディレクトリまで何かを探しにいったのだろうというところまでは何となくわかったのですが「CMD」と「config」と「--cppflags」の示す意味が分かりません。--cppfragsについてはオプション?と思っているのですが・・・。
【6】パイプについて
①では、RCPPINCL := $(shell echo 'Rcpp:::CxxFlags()' | $(R_HOME)/bin/R --vanilla --slave)
②では、RCPPINCL = $$system($$R_HOME/bin/Rscript -e 'Rcpp:::CxxFlags()')
と書かれています。
①は「Rcpp:::CxxFlags」を実行してから「R_HOME/bin/R」を実行っていう意味なのでしょうか?
でも②では1行で済んでいます。
また、①では「$(R_HOME)/bin/R」「Rcpp:::CxxFlags()」、
②では「R_HOME/bin/Rscript」「'Rcpp:::CxxFlags()\」と書かれ方が違うようです。これも書き方の違いが分かりません。
【7】変数について
R_HOME・RCPPFLAGS・RCPPINCL・CXXFLAGS というものが出てくるのですが、何かmakeのルールに従った既存の関数?変数なのでしょうか。それとも、makefile内部で作られた変数なのでしょうか。
何とか読もうとしているのですが
1行1行何をどう読めばいいのか分からない状態です。
質問が多くなり申し訳ないのですが、一部分でも何かご存じでしたら
どうぞよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/25 02:09
2017/05/28 05:56
2017/05/29 18:51