我试图创建一个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 [email protected] $(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文件创建一个单独的目标,因为它太乱了。
虽然这不是直接回答您的问题,但我建议您查看cmake来为您生成Makefile文件。它似乎有你想实现内置的自动化类型。 – jpe
@jpe cmake似乎比手动更复杂。我不得不投入几天的时间,现在我非常着急编译这个项目。 –
在CMake中,实际上可以从大约三行或四行中匹配特定模式的所有文件创建一个库,这比Makefile文件要清晰得多。不是说,在Makefile中“手动”这样做肯定是一个坏主意,只是不要被CMake所看到,也许看起来复杂而复杂 - 它提供了很多很好的功能,但并不是很难习惯。 – sonicwave