我正在尝试创建一个 Makefile,除其他外,它会输出一些 library1.a,之后我将重用它来创建可执行文件。现在这是我的困境:我想让这个过程通用,这样我就不必每次添加一些文件时都编辑 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 文件创建一个单独的目标,因为它太乱了。