2011-07-11 13 views
0

ソース私はサブフォルダ内のすべての* .cファイルをコンパイルするメイクファイルを持って作ります。私の.cファイルが、私はいつもCOBJのために行うには、」何も...任意のアイデア?は、サブフォルダの質問

+1

'foo.o'を親ディレクトリまたは' csrc/'に入れたいですか? – Beta

+0

はcsrc /にとどまり、おそらくそれほど重要ではありません....ありがとうございます – user270398

答えて

2

あなたのパターンルールcsrc/%.o: %.c並進例えばfoo.ccsrc/foo.oを見ていないフォルダ「CSRC」に

objects := $(addprefix, csrc/, $(patsubst %.c,%.o,$(wildcard *.c))) 
cobj: $(objects) 
$(objects): csrc/%.o: %.c 
    $(CC) -c $< -o [email protected] 

ないと言うことができますcsrc/foo.c。おそらく、それはあなたが望むものではありません。

はなぜちょうど%.o: %.c

1

何オリCharlesworthが言ったことは正しいことではないが、別の間違いがあります。wildcar d関数は現在のディレクトリのみをチェックします。今のように、$(objects)は空になります(私は現在の親ディレクトリにソースファイルがないと仮定します)。 $(wildcard csrc/*.c)

+0

$(ワイルドカードcsrc/*。c) - それはチケットです。ありがとうございました。 – user270398

+0

フォルダ名に「ワイルドカード」とスペースが含まれているとは何ですか? $(ワイルドカードcsrc/*。c)は動作しますが、$(ワイルドカードcsrc 1.0/*。c)は動作しません。フォルダ名に空白を含めるために、$(ワイルドカードcsrc \ 1.0/*。c)、または$(ワイルドカード "csrc 1.0"/*。c)、またはその他の通常のやり方はありません... – user270398

+0

@ user270398:一般に、この場合、ワイルドカード関数は、これを2つの独立したパターン 'csrc'と' 1.0/*。c'とみなし、別々にマッチしないようにしようと試みます。私は空間をエスケープすることは可能だっただろうと推測したかもしれないが、明らかにそうではない。フォルダとファイル名のスペースが悪い理由である(多くの)理由の1つ。 – eriktous