私は新しいifleを作成する 私は私のメインで特定の機能をテストしたい。この機能は、私が傾けることもできない多くの依存関係を持っています。.dファイルを使用して、すべての依存するcファイルをコンパイルできますか?
.cファイルで.cファイルを使用して私のメインをコンパイルすることは可能ですか? .dファイルはすべての依存関係を取得しますか?
私はそれが
mymain.o : requiredfunctions.d mymain.c
私は新しいifleを作成する 私は私のメインで特定の機能をテストしたい。この機能は、私が傾けることもできない多くの依存関係を持っています。.dファイルを使用して、すべての依存するcファイルをコンパイルできますか?
.cファイルで.cファイルを使用して私のメインをコンパイルすることは可能ですか? .dファイルはすべての依存関係を取得しますか?
私はそれが
mymain.o : requiredfunctions.d mymain.c
ような何かを行うことが可能である場合は、ソースファイル、ヘッダファイル、オブジェクトファイルと実行可能ファイルとの間の関係を誤解しているように見えることを考えていました。
は、我々はいくつかの機能を持っていると仮定:
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)))
あなたは「依存関係」を言うとき、あなたは '例えば(ヘッダファイルを意味していますmymain.c'に '#include "kitchensink.h"という行がありますか?) – Beta
実際には、 "requiredfunctions.c"ファイルをコンパイルするために必要なすべてのcファイル – becks
dファイルにはヘッダーファイルのみが含まれていることがわかりますが、私は幾分それを使ってジョブを実行できますか、 snは可能です。 – becks