2016-09-09 7 views
0

私の元のディレクトリ構造は次のとおりです。実行ファイルをフォルダの下に置く方法は?

include/ (const.h , map_reduce.h)

src/ (main.c , map_reduce.c)

Makefile

CFLAGS = -Wall -Werror 
BINS = bin_mapreduce 

all: $(BINS) 

bin_mapreduce: bin/mapreduce 

bin/mapreduce: mapreduce | bin 

mapreduce: 
    gcc $(CFLAGS) src/main.c -o bin/[email protected] 

bin: 
    mkdir [email protected] 


clean: 
    rm -f bin/mapreduce 


clean: 
    rm -f bin/mapreduce 

私は人がいない場合はbinフォルダを作成します。

次に、main.cを実行可能なmapreduceファイルにコンパイルし、binフォルダに入れます。ビン/なしでそれを行う場合は、単に、

/usr/bin/ld: cannot open output file bin/mapreduce: No such file or directory

collect2: error: ld returned 1 exit status

Makefile:19: recipe for target 'mapreduce' failed

make: *** [mapreduce] Error 1

::私はビンを追加する場合

しかし、ビン/ $ @をするために、/ $ @を前に、それはエラーを示し

gcc $(CFLAGS) src/main.c -o [email protected] 

の場合binフォルダの外にmapreduceファイルを作成すると、binフォルダが作成されます。

mapreduceファイルをbinフォルダに配置するにはどうすればよいですか?

+0

あなたはbin /にコピーしてmapreduceターゲットに入れることで、ソースをbin /ディレクトリの中にコンパイルすることができます – Evert

答えて

2
bin/mapreduce: mapreduce | bin 

このルールは正しくありません。 mapreduceを実行する前に、binを作成する必要があります。しかし、その規則はその配列決定を達成しません。ここではいくつかのオプションがあります

  • のみmapreduceターゲット上で前提条件の順序を置く:のみ$(BINS)ターゲット上で前提条件の順序を置く

    mapreduce: | bin 
    
  • $(BINS) : | bin 
    
関連する問題