makefileからの複数の実行ファイル

私はcで書かれた簡単なシミュレートされたリアルタイムオペレーティングシステムをコンパイルするmakefileを書こうとしています。

ディレクトリ構造は次のようになります

 **KB**

     SOURCE
     -------
         - Keyboard.c (helper process)
     Incl
     --------
         - Include files needed by keyboard.c

    **CRT**

     SOURCE
     -------
         - crt.c (helper process)
     Incl
     --------
         - Include files needed by crt.c

    **RTX**

    SOURCE
    -------
       - SOURCE Files

    INCLUDE
    --------
       - Include Files

RTXでは、ヘルパープロセスを2つの実行可能ファイルにコンパイルし、実行可能ファイルを使用して実行する必要があります。

同じMakefile内で3つの異なる実行ファイルを生成する方法や、1つの実行可能ファイルに対しても異なるインクルードファイルにそのファイルを含める方法についてはわかりません。以前はmakefileを作成したことがなく、オンラインのチュートリアルに続いて問題が発生しています。

RTXのためにこれまで私が持っていたことがあります(別のパスに追加する方法は?)

#For RTX Exexutable
OBJS = api.o init_table.o k_rtx.o msg.o pcb.o queue.o user_proc.o main.o

iRTX-G29 : $(OBJS)
    gcc -o iRTX-G29 $(OBJS)

api.o : api.h
    gcc -c api.c
init_table.o : init_table.h
    gcc -c init_table.c
k_rtx.o : unistd.h string.h k_rtx.h
    gcc -c k_rtx.c
main.o : fcntl.h sys/mman.h sys/wait.h stdio.h stdio.h sys/types.h sys/ipc.h sys/shm.h errno.h string.h stdlib.h signal.h k_rtx.h buffer.h global.h
    gcc -c main.c
msg.o : msg.h
    gcc -c msg.c
queue.o : queue.h
    gcc -c queue.c
user_proc.o : user_proc.h
    gcc -c user_proc.c

どんな助けでも大歓迎です!ありがとう!

0
これはかなり単純なレイアウトのように見えます。 1)メイクファイルはどこですか? 2)オブジェクトファイル( msg.o )と実行可能ファイル(iRTX-G29)はどこにありますか? 3)これらの3つのブランチは互いに依存していますか(RTXは Keyboard.h または crt.h を必要としますか?
追加された 著者 Beta,
もう1つ質問:Makeのどのバージョンを使用していますか? (わからない場合は、 make -v を試してください)。
追加された 著者 Beta,
makefileはprojectというメインディレクトリにあります。 "Project"ディレクトリには、ディレクトリRTX、KB、およびCRTが含まれています。各ディレクトリには、ソースファイルとヘッダファイルが格納されているソースフォルダとヘッダフォルダがあります。 makefileは、キーボード用に1つ、crtに1つ、RTX自体に3つの実行可能ファイルを生成する必要があります。
追加された 著者 Falcata,
RTX実行可能ファイルには実行するKBおよびCRT実行可能ファイルが必要ですが、ヘッダーファイルは必要ありません。各実行ファイルは異なるプロセスです。
追加された 著者 Falcata,
私は3.81を使用しています。返信ありがとう!
追加された 著者 Falcata,

3 答え

まず、既存のmakefileを単純化してみましょう。同じフォームを持つ多くのオブジェクトルールがあります。

msg.o : msg.h
    gcc -c msg.c

それを書くためのよりクリーンな方法は次のようなものです:

msg.o : msg.c msg.h
    gcc -c $< -o [email protected]

(依存関係 msg.c を追加して、自動変数を指定し、出力の名前を指定します)。これらのオブジェクトルールはすべて同じように見えるので、< -o [email protected]

4
追加された

makefileでは、実際のファイルに対応しないターゲットを書くことができます:

all: executable1 executable2

executable1: a.o b.o
gcc -o [email protected] $^

executable2: c.o d.o
gcc -o [email protected] $^
1
追加された

同じMakefile内で異なる3つの実行ファイルを生成する方法や、1つの実行可能ファイルに対しても異なるインクルードファイルにそのファイルを含める方法についてはわかりません。

これはautomakeを使うのに最適な時間です。 Sarah George は良いチュートリアルを書いています。

0
追加された
@Falcata:この場合、宿題タグを追加する必要があります。
追加された 著者 thiton,
私はおそらく私は手書きでメイクファイルを書く必要があることに言及すべきです[
追加された 著者 Falcata,