c++ - makefile 一次又一次地为不同的对象选择相同的源文件

标签 c++ makefile

我正在尝试编写一个 makefile,假设我在目录 src/app/ 中有 4 个源文件:

src/app/file1.cpp
src/app/file2.cpp
src/app/file3.cpp
src/app/file4.cpp

我想在另一个名为 obj/ 的目录中创建不同的目标文件(即 file1.ofile2.o 等) .在 makefile 中,我这样定义变量:

$(SRC) := $(wildcard src/app/*.cpp)
$(OBJ) := $(addprefix obj/,$(notdir $(SRC:.cpp=.o)))

我的命令是这样的:

all: $(OBJ)

$(OBJ): $(SRC)
    $(CC) $(CFLAGS) -I/src/app/app.h -c $< -o $@

所以当我运行 make 时,我看到了这些操作:

g++ -g -Wall -I/src/app/app.h -c src/app/file1.cpp -o obj/file1.o
g++ -g -Wall -I/src/app/app.h -c src/app/file1.cpp -o obj/file2.o
g++ -g -Wall -I/src/app/app.h -c src/app/file1.cpp -o obj/file3.o
g++ -g -Wall -I/src/app/app.h -c src/app/file1.cpp -o obj/file4.o

你可以看到,目标文件有不同的名字,但源文件是一样的。我该如何解决?

请注意,我不能使用 %.o: %.cpp,因为我的 makefile 中有其他目标用于不同的目的。

最佳答案

如果你不能使用

obj/%.o: src/app/%.cpp

那么第二种最简单的方法就是在最前面加上$(OBJ)::

$(OBJ): obj/%.o: src/app/%.cpp

它被称为“静态模式规则”——在 GNU Make 手册中查找它。

关于c++ - makefile 一次又一次地为不同的对象选择相同的源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39433416/

相关文章:

c# - 可能由 Nuget 包引起的 Visual Studio 2013 错误?

c++ - 链接到好友功能时出错

gradle - 并行化 GNU Makefile 等 gradle 任务

xcode - 升级到 Mountain Lion 和 XCode 4 打破了我的 "make"?

c++ - uintmax_t 不处理 128 位

c++ - RXCPP:做一个不关心可观察对象输入类型的扩展

c++ - OpenCV:查找轮廓(); - 我使用的是什么内核

c# - 无法使用 C# TCP 服务器和 C++ TCP 客户端接收消息

C++ makefile 构建多个 dll 和项​​目结构

c - 我的 makefile 有什么问题?