:中
CC=g++
CPPFLAGS=`pkg-config --cflags --libs gtkmm-3.0`
SRCS=$(wildcard classes/source/*.cc)
PROGS=$(patsubst %.cc,%,$(SRCS))
CLASS_HEADERS=classes/
all: $(PROGS)
mkdir -p build/release/objs
%: %.cc
$(CC) -I$(CLASS_HEADERS) -c $< -o build/release/objs/$(@F).o $(CPPFLAGS)
結果。 -p
オプションを使用している場合、このコマンドを重複して実行することは実際には問題ありません。
%: %.cc
mkdir -p build/release/objs
$(CC) -I$(CLASS_HEADERS) -c $< -o build/release/objs/$(@F).o $(CPPFLAGS)
GNU make's -j optionに私の答えで述べたように:それは時々働くかもしれないが、単にあなたの既存のall
依存リストの最初の依存関係としてmkdir
ターゲットを追加することは正しくありません。原則として、これらは任意の順序で実行することができます(mkdir
は必ずしも最初ではありません)。依存関係に基づくアプローチを採用したい場合、より複雑な作業を開始する必要があります。
all: do_mkdir
$(MAKE) $(progs)
do_mkdir:
mkdir -p build/release/objs
'ビルド/リリース/ objs'のための別の依存関係のターゲットを提供し、' '$(PROGS)の前にあることを置きます。 –
'all 'の規則は次のように言っています:' $(PROGS) 'がすべて最新であることを確認してください。それが終わったら、 'mkdir'を実行すると' all'を作成する作業が完了します。あなたは 'all:objdir $(PROGS)'のようなものが必要です。ここで、 'objdir'のルールは次のようになります:' objdir:; mkdir -p build/release/objs'(セミコロンの代わりに改行とタブを使いますが、実際には1行で表記します)。これは、@πάνταῥεwhatが言ったことのちょうど長いバージョンです。 –
Jonathan Lefflerあなたは私の問題を解決し、makeの仕組みを理解するのに役立つ素晴らしい説明を提供しました。 – Russeree