gpt4 book ai didi

makefile - 在与 src 不同的目录中构建输出的 GNU Make 模式

转载 作者:行者123 更新时间:2023-12-03 10:02:29 24 4
gpt4 key购买 nike

我正在尝试创建一个 Makefile 来放置我的 .o与我的源文件位于不同目录中的文件。我正在尝试使用模式规则,因此我不必为每个源文件和目标文件创建相同的规则。

我的项目结构类似于:

project/
+ Makefile
+ src/
+ main.cpp
+ video.cpp
+ Debug/
+ src/ [contents built via Makefile:]
+ main.o
+ video.o

我的 Makefile 看起来像:
OBJDIR_DEBUG = Debug
OBJ_DEBUG = $(OBJDIR_DEBUG)/src/main.o $(OBJDIR_DEBUG)/src/video.o

all: $(OBJ_DEBUG)

$(OBJ_DEBUG): %.o: %.cpp
$(CXX) $(CFLAGS_DEBUG) $(INC_DEBUG) -c $< -o $@

这不起作用,因为它在 Debug/src/*.cpp 寻找我的源文件.

我尝试了以下方法:
# Broken: make: *** No rule to make target `Debug/src/main.cpp', needed by `Debug/src/main.o'.  Stop.
# As a test, works if I change "%.cpp" to "Debug/src/main.cpp", though it obv. builds the wrong thing

# Strip OBJDIR_DEBUG from the start of source files
$(OBJ_DEBUG): %.o: $(patsubst $(OBJDIR_DEBUG)/%,%,%.cpp)
$(CXX) $(CFLAGS_DEBUG) $(INC_DEBUG) -c $< -o $@


# Broken:
# Makefile:70: target `src/main.o' doesn't match the target pattern
# Makefile:70: target `src/video.o' doesn't match the target pattern

# Add OBJDIR_DEBUG in target rule
OBJ = src/main.o src/video.o

$(OBJ): $(OBJDIR_DEBUG)/%.o: %.cpp
$(CXX) $(CFLAGS_DEBUG) $(INC_DEBUG) -c $< -o $@

最佳答案

重读后documentation on static pattern rules ,我得出了以下似乎有效的模式规则。

$(OBJ_DEBUG): $(OBJDIR_DEBUG)/%.o: %.cpp
$(CXX) $(CFLAGS_DEBUG) $(INC_DEBUG) -c $< -o $@

我不确定这是最好的方法,我愿意接受建议。

关于makefile - 在与 src 不同的目录中构建输出的 GNU Make 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13552575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com