73999


### 前提・実現したいこと

Rakeを用いて、C言語のビルドシステムを構築しています。

複数ファイルをコンパイルする際、CPUの複数のコアを使用して並行でコンパイルできるようにしたいのですが、どのようにRakeファイルを書けばいいのか、アドバイスをいただけないでしょうか？

makeでいう、`make -j` をRakeで実現したいです。

制約として、新たにGemをインストールしない方法が好ましいです。

### 発生している問題・エラーメッセージ

Rakeで複数ファイルのコンパイルを同時並行で行う記述方法が分かりません。

### 該当のソースコード

分かりやすいように、単純化したRakeファイルを記載します。

[code]

    CC = "gcc"
    
    task :default => "hello"
    
    file "hello" => ["hello.o", "message.o"] do
      sh "#{CC} -o hello hello.o message.o"
    end
    
    file "hello.o" => "hello.c" do　※1
      sh "#{CC} -c hello.c"
    end
    
    file "message.o" => "message.c" do　※2
      sh "#{CC} -c message.c"
    end
    
[/code]

[http://www2s.biglobe.ne.jp/~idesaku/sss/tech/rake/](http://www2s.biglobe.ne.jp/%7Eidesaku/sss/tech/rake/)
抜粋

※1、※2のファイルタスクを同時並行で実行し、並行コンパイルを実現したいです。

### 試したこと

単純なRakeタスクならば、以下のページに記載のように multitask
を用いることで並行してタスクが実行できるのですが、ファイルタスクの場合、どのように記載していいかが分かりません。

<http://nilquebe.blogspot.com/2014/06/rake-part-7-multitask.html>

### 補足情報（FW/ツールのバージョンなど）

ruby 2.6.4p104 (2019-08-28 revision 67798) [i386-cygwin]


CC BY-SA 4.0
2021-02-14T12:47:32.090
73990
2021-02-15T02:32:15.157
2021-02-15T02:32:15.157
3060
13551
question
ruby c rake
RakeでC言語をビルドする際、並行コンパイルを行う方法


Rake の `-m` (`--multitask`) オプションを使用すると、すべてのタスクを `multitask`
として扱うので並行コンパイルできると思います。


CC BY-SA 4.0
2021-02-15T01:39:27.783
73997
2021-02-15T01:39:27.783
43970
73990
answer

[code]

    rake -m
    
[/code]

というのも、あるようですが、ご希望には沿わないですか？  
並列化、ビルド時間の短縮には、ccache,distccなどもありますね。  
頑張ってください。


CC BY-SA 4.0
2021-02-15T01:43:29.830
73999
2021-02-15T01:43:29.830
43957
73990
answer