ビルド システムとして Jam の使用に切り替えたいと考えています。現在、src、include、および build ディレクトリがあり、Jam にオブジェクト ファイルを build ディレクトリに配置し、include ディレクトリで include ファイルを検索する方法を考えています。
1 に答える
Jam をご利用いただきありがとうございます。いくつかの奇妙な点を乗り越えれば、メイクファイルよりもはるかに簡単であることがわかると思います。
あなたが尋ねているのは、私がよく使ってきたセットアップです。最上位には、src、inc、build の 3 つのディレクトリがあります。Jamfile というファイルもあります。
# top-level Jamfile
SubDir . ;
SubInclude src ;
SubInclude build ;
SubDir 行は、ディレクトリ構造内でこのファイルの場所を確立し、Jam が機能するために必要なようです。(Jam はそれを必要としないように設計されていた可能性があると思いますが、それはあります。) SubInclude 行は、Jam に 2 つのサブディレクトリを含めるように指示します。inc サブディレクトリは含まれていません。これは、直接コンパイルする必要があるものがないためです。その内容はすべて他のファイルに含まれます。
inc 内に、header.h というヘッダー ファイルがあります。
/* header.h */
#define MESSAGE "Hello world!"
src 内に、メイン プログラム main.c のソースがあります。
/* main.c */
#include "header.h"
#include <stdio.h>
int main(int argc, char** argv)
{
printf("%s\n", MESSAGE);
return 0;
}
また、src 内には、次の内容を含む別の Jamfile があります。
# src/Jamfile
SubDir .. src ;
HDRS += ../inc ;
Library helloworld : main.c ;
SubDir 行は、ディレクトリ構造内で Jamfile を見つけます。HDRS 行は、追加のヘッダーが見つかる場所を Jam に伝えます (その時が来たら、これをコンパイラーに渡します)。既存の変数に追加する += 演算子の使用に注意してください。Library 行は、Jam に main.c からライブラリを構築するように指示します (はい、main() を含むライブラリは少し奇妙ですが、このような小さなプロジェクトでは問題ありません)。
ビルド内には単一の Jamfile があります。
# build/Jamfile
SubDir .. build ;
Main helloworld ;
LinkLibraries helloworld : helloworld ;
SubInclude .. src ;
SubDir 行は、ディレクトリ構造内で Jamfile を見つけます。Main 行は、Jam に helloworld という実行可能ファイルをビルドするように指示します。ソース ファイルの依存関係がないことに注意してください。もしそうなら、それはのようになりますMain hello world : foo.c ;
。LinkLibraries 行は、helloworld 実行可能ファイルをライブラリ (helloworld とも呼ばれる) にリンクするよう Jam に指示します。この場合、実行可能ファイルとライブラリが同じ名前であっても問題ありませんが、実際のプログラムでは、別の (より適切な) 名前を付けたい場合があります。SubInclude 行は、ビルドするコードをさらに探して src ディレクトリを調べるよう Jam に指示します。これは、実行可能ファイルとライブラリ間の依存関係が解決される方法です。この行が最後に来ることが重要です。
ここで、ビルド ディレクトリに移動して jam コマンドを実行すると、Jam は src に helloworld.a ファイルをビルドし、ビルドで helloworld 実行可能ファイルにリンクします。
src 内のすべてのコードがライブラリにコンパイルされるため、.o ファイルが残っていません。結局、それらはすべてアーカイブである .a ファイル内に保存されます。ビルドに追加のソース ファイル (上記の架空の foo.c など) がある場合、コンパイル後にビルド ディレクトリに .o ファイルが残ります。
これで頑張ってください。私が Jam について知っていることのほとんどは、Perforce のWeb サイトや実験を通じて学びました。Jam の Perforce のメイン ページはこちらです。