2017-02-17 1 views
0

私はUbuntuでgccを使っているので、Makefileを作成しようとしています。私のプロジェクトフォルダはこのフォルダの中の "プロジェクト"と呼ばれます。ソース、ヘッダ、オブジェクト(空)の3つのフォルダがあります。異なるディレクトリにあるファイルを持つMakefile

私のMakefileは、オブジェクトファイルをフォルダ "objects"に作成できるはずです。しかし、私は実行ファイルとメイクファイルをメインフォルダに入れたい: "project"とすると、実行ファイルとオブジェクトファイルをきれいにすることができる。 これらのフォルダを含むどのようにプログラムをコンパイルできますか?これは例として私のMakefileです。フォルダ "project"は私のホームフォルダにあります。

CFLAGS= -ansi -pedantic -Wall -c 
all: project 

project: ./objects/main.o ./objects/factorial.o ./objects/gcd.o ./objects/greatestNumber.o ./objects/primeNumbers.o 
    gcc -o project ./objects/main.o ./objects/factorial.o ./objects/gcd.o ./objects/greatestNumber.o ./objects/primeNumbers.o 

main.o: ./sources/main.c 
    gcc $(CFLAGS) ./sources/main.c 

factorial.o: ./sources/factorial.c ./headers/factorial.h 
    gcc $(CFLAGS) ./sources/factorial.c 

gcd.o: ./sources/gcd.c ./headers/gcd.h 
    gcc $(CFLAGS) ./sources/gcd.c 

greatestNumber.o: ./sources/greatestNumber.c ./headers/greatestNumber.h 
    gcc $(CFLAGS) ./sources/greatestNumber.c 

primeNumbers.o: ./sources/primeNumbers.c ./headers/primeNumbers.h 
    gcc $(CFLAGS) ./sources/primeNumbers.c 

clean: 
    rm -f ./objects/main.o ./objects/factorial.o ./objects/gcd.o ./objects/greatestNumber.o ./objects/primeNumbers.o project 

おかげ

+0

'main.o'はヘッダに依存しませんか? – aschepler

+0

これはgcd.h、factorial.h、greatestNumber.h、primeNumbers.hに依存します。 – user3654532

答えて

5

あなたが他のすべてのファイル名のために行うと同じように、オブジェクトのターゲットへのパスを与える必要があります。

./objects/main.o: ./sources/main.c 
    gcc $(CFLAGS) ./sources/main.c 

...など。

+1

コンパイラに対して '-o'オプションを使用して、必要な場所にオブジェクトファイルを出力するよう指示する必要もあります。 '-o $ @'を使ってmakeの自動変数を使うのが最も簡単です。 – MadScientist

関連する問題