Makefile改进:几个可执行文件和目录
Makefile improvements: several executables & directories
我有这个正在工作的Makefile,我想改进它:
CXX = g++
RM = rm -f
CXXFLAGS = -O2 -s -Wall -std=c++11
LDFLAGS = -Wl,-z,relro
SRCS = target1.cpp target2.cpp target3.cpp utils.cpp
OBJS = $(subst .cpp,.o,$(SRCS))
.PHONY: all target1 target2 target3 clean
all: target1 target2 target3
target1: target1.o utils.o
$(CXX) $(CXXFLAGS) $(LDFLAGS) $^ -o $@ $(LDLIBS)
target2: target2.o utils.o
$(CXX) $(CXXFLAGS) $(LDFLAGS) $^ -o $@ $(LDLIBS)
target3: target3.o utils.o
$(CXX) $(CXXFLAGS) $(LDFLAGS) $^ -o $@ $(LDLIBS)
clean:
$(RM) $(OBJS)
我的问题是:
- 每个目标都需要
utils.o
。是否可以避免为target1/target2/target3写入3次相同的行 - 我想分离源、对象和二进制文件(./中的Makefile,./中二进制文件,src/中的源,obj/中的对象)。为了避免写入
target1: obj/target1.o obj/utils.o
等等,最好的解决方案是什么
谢谢!
1)是的,您可以使用模式规则:
target%: target%.o utils.o
$(CXX) $(CXXFLAGS) $(LDFLAGS) $^ -o $@ $(LDLIBS)
2) 它真的没有那么糟糕:
target%: obj/target%.o obj/utils.o
$(CXX) $(CXXFLAGS) $(LDFLAGS) $^ -o $@ $(LDLIBS)
可以避免这两个obj/
前缀,但这真的不值得麻烦。
相关文章:
- 为多个测试文件构建可执行文件
- 使用 make 编译多个可执行文件
- 具有多个可执行文件和依赖项的生成文件
- 在QMAKE中编译之前,如何使用可执行文件构建多个标头文件
- CMake 项目结构:如何正确地将库合并在一起并将它们包含在多个可执行文件中
- 如何使用相同的可执行文件在后台运行 3 个 QProcess
- 如何使用gnu_parallal以运行多个可执行文件和/或bash脚本
- #include 多个.cpp中的标准文件,与将其 #include 在预编译标头中会影响可执行文件的大小?
- cusparse功能的多个定义错误在链接可执行文件中的cuda文件时
- 我需要制作多个可执行文件来针对不同的指令集吗
- 让可执行文件在多个 Linux 操作系统上运行:
- 如果可执行文件在两个或多个节点上运行,为什么它不能看到环境变量?
- IPC通过两个不同的可执行文件
- 当文件相互依赖时,如何使用g++将多个cpp文件编译为一个可执行文件
- 是否可以使用C++中的一个make命令,用两个不同的gcc版本编译两个不同可执行文件
- 使用system()运行两个可执行文件
- 具有多个目标的生成文件,并创建一个包含可执行文件的目录
- CMake fixup_bundle多个可执行文件
- C++处理多个可执行文件的公共参数
- Makefile改进:几个可执行文件和目录