とりわけ、いくつかのlibrary1.aを出力するMakefileを作成しようとしています。これは、後で実行可能ファイルを作成するために再利用します。これが私のジレンマです。このプロセスを汎用的にしたいので、ファイルを追加するたびにMakefileを編集する必要はありません。これが私が心に留めていることです:
#Declare phony targets
.PHONY: all clean build_utils
#Compiler
CXX = g++
#Flags
CXXFLAGS = -Wall -Wextra -Wconversion -Werror -pedantic -std=c++0x -O2
#Directories
OUTPUT_DIR = _output/linux
INTERMEDIATE_DIR = _intermediate/linux
UTILS_DIR = utils
all: $(OUTPUT_DIR)/libUtils.a
$(OUTPUT_DIR)/libUtils.a:
ar rcs $@ $(INTERMEDIATE_DIR)/utils/$(patsubst %.cpp, %.o, $(wildcard $(UTILS_DIR)/ *.cpp))
#create .o files in %INTERMEDIATE_DIR/utils
build_utils: $(UTILS_DIR)/ *.cpp $(UTILS_DIR)/ *.h
$(CXX) -c $(CXXFLAGS) $^ -o ## What must be placed here? ##
したがって、基本的には、すべてのオブジェクトファイルを一時ディレクトリに作成してからアーカイブする必要がありlibUtils.a
ますが、入力ファイルに基づいて複数のオブジェクトファイルを出力するようにコンパイラに要求する方法がわかりません。基本的に、私の標準では、.cppファイルごとにオブジェクトファイルを取得する必要がありますが、これを行う方法がわかりません。面倒なので、.oファイルごとに個別のターゲットを作成したくありません。