2016-07-30 10 views
1

私は新しいifleを作成する 私は私のメインで特定の機能をテストしたい。この機能は、私が傾けることもできない多くの依存関係を持っています。.dファイルを使用して、すべての依存するcファイルをコンパイルできますか?

.cファイルで.cファイルを使用して私のメインをコンパイルすることは可能ですか? .dファイルはすべての依存関係を取得しますか?

私はそれが

mymain.o : requiredfunctions.d mymain.c 
+0

あなたは「依存関係」を言うとき、あなたは '例えば(ヘッダファイルを意味していますmymain.c'に '#include "kitchensink.h"という行がありますか?) – Beta

+0

実際には、 "requiredfunctions.c"ファイルをコンパイルするために必要なすべてのcファイル – becks

+0

dファイルにはヘッダーファイルのみが含まれていることがわかりますが、私は幾分それを使ってジョブを実行できますか、 snは可能です。 – becks

答えて

1

ような何かを行うことが可能である場合は、ソースファイル、ヘッダファイル、オブジェクトファイルと実行可能ファイルとの間の関係を誤解しているように見えることを考えていました。

は、我々はいくつかの機能を持っていると仮定:

void alpha(); 
void beta(); 
void gamma(); 
void delta(); 
... 

各々はヘッダファイルalpha.h)で宣言され、ソースファイルalpha.c)で定義されています。今のところ、これらの機能が独立しているとします。彼らはお互いに電話しません。 -o手段-cは、「オブジェクトファイルを構築する」という意味

gcc -c beta.c -o beta.o 

は(「-cc -OOは」単なる偶然で、:。(オブジェクトファイルを生成するために)それらのいずれかをコンパイルするのは簡単です「ここに結果の名前を付ける方法はこちら」)

また、すべてを呼び出す関数void octopus()があります。 octopus.c

// octopus.h 
void octopus(); 

を、ソースファイルでそれを定義します:私たちはoctopus.h、ヘッダにそれを宣言

#include "alpha.h" 
#include "beta.h" 
... 
#include "omega.h" 

void octopus() 
{ 
    ... // calls alpha(), beta(), etc. 
} 

は、オブジェクトファイルを生成することは簡単です:今

gcc -c octopus.c -o octopus.o 

我々を想定しますmymain.cというファイルがあり、これにはmain()が含まれ、いくつかの関数が呼び出されます。

オブジェクトファイル mymain.oを構築
#include "alpha.h" 
#include "beta.h" 

int main() 
{ 
    alpha(); 
    beta(); 
    return 0; 
} 

は簡単です:実行mymainを構築

gcc -c mymain.c -o mymain.o 

は少し難しいです:

gcc mymain.o alpha.o beta.o -o mymain 

このすべてがクリアされている場合は、私が試みることができますあなたが望むものを推測してください。 main()octopus()と呼んで、alpha, beta,... omegaというリストがわからなくても、の実行ファイルをビルドしたいのですか?

EDIT:ファイルoctopus.d持ちの場合:多くの方法のいずれかによって

alpha.o beta.o ... omega.o 

octopus.o: octopus.c alpha.h beta.h ... omega.h 

を使用すると、必要なオブジェクトファイルのリストにそれを回すことができます。あなたは、コマンドラインからsedを使用することができます

sed 's/.*\.c //;s/h /o /g' octopus.d 

またはあなたが作るのテキスト操作関数を使用することができ、メイクファイル内:

OBJECTS := $(subst .h,.o,$(filter %.h, $(shell cat octopus.d))) 
+0

正確に。これは私がしたいことですか?私が持っているものは、ファイルoctobus.cの.dファイルです。 – becks

+0

@becks: 'octopus.d'を' alpha.o beta.o ... omega.o'リストにする方法を教えてくださいそれで十分でしょうか?チェーン全体を説明すると、この回答は非常に長くなりすぎるので、私は尋ねます。 – Beta

+0

はい、これは私の質問に答えます – becks

関連する問題