2017-09-05 34 views
0

多くのメインを含むフォルダで自動的に見つかる多くのメインをコンパイルしたいと思います。makefile複数のメインとワイルドカード

SOURCES  = $(wildcard src/shared/*.cc) 
OBJECTS  = $(SOURCES:%.cc/%.o) 
MAINS_SOURCES = $(wildcard src/mains/*.cc) 
MAINS_OBJECTS = $(MAINS_SOURCES:%.cc=%.o) 
PROGRAMS_NAME = $(MAINS_SOURCES:src/mains/%.cc=%) 

今のところ私はこのコードを持っていますが、もちろんこのコードは複数のメインでは動作しません。

$(PROGRAMS_NAME):$(OBJECTS) $(MAINS_OBJECTS) 
    $(CXX) $(LIBS) $(OBJECTS) $(MAINS_OBJECTS) -o [email protected] 

どのようにして各メインで正しく$(MAINS_OBJECTS)を分割できますか?

ありがとうございます!頻繁に便利ですstatic pattern rules状況のこの種の

+0

は、あなたが何をしようとしての例を提供することはできますか? – blackghost

答えて

0

SOURCES  = $(wildcard src/shared/*.cc) 
OBJECTS  = $(SOURCES:%.cc/%.o) 
MAINS_SOURCES = $(wildcard src/mains/*.cc) 
MAINS_OBJECTS = $(MAINS_SOURCES:%.cc=%.o) 
PROGRAMS_NAME = $(MAINS_SOURCES:src/mains/%.cc=%) 

$(OBJECTS) $(MAINS_OBJECTS): %.o: %.cc 
    $(CXX) $(CXXFLAGS) -c $< -o [email protected] 

$(PROGRAM_NAME): %: src/mains/%.o $(OBJECTS) 
    $(CXX) $(LIBS) $^ -o [email protected] 
+0

'OBJECTS_CXX'は、実行可能ファイルを生成するために必要なオブジェクトファイルです。 – monkeyonkeyboard

+0

私は物事をテストしていて、 'SOURCES_CXX'と' OBJECTS_CXX'を使っていましたので、 'MAIN_SOURCES_CXX'と' MAIN_OBJECTS_CXX'を使うべきです。混乱させて申し訳ありません。 'MAIN_SOURCES_CXX'と' SOURCES_CXX'には空の交差があります。 – monkeyonkeyboard

+0

完了、より良い命名に変更! – monkeyonkeyboard