【发布时间】:2021-11-11 00:04:26
【问题描述】:
我试图将我的 cpp 源文件和我的目标文件放在不同的目录中,所以我试图使用 Make 的 patsubst 来替换路径。什么都没有编译后,我做了一个虚假的目标来简单地打印出相关的变量,我发现 patsubst 什么也没返回。这对我来说没有多大意义,据我所知,与模式不匹配的目标应该不变地通过,所以即使我的模式格式错误,我仍然应该看到 一些东西 em> 被退回。
我的变量是这样声明的:
SRC_DIR := source/
SRC := $(wildcard $(SRC_DIR)*.cpp)
OBJ_DIR := obj/
OBJ := $(PATSUBST $(SRC_DIR)%.cpp, $(OBJ_DIR)%.o, $(SRC))
我只是打印出上述变量的虚假目标如下所示:
.PHONY: print
print:
@echo $(SRC_DIR)
@echo $(SRC)
@echo $(OBJ_DIR)
@echo $(OBJ)
运行make print的结果是这样的:
user@athena:~/proj$ make print
source/
source/main.cpp source/util.cpp
obj/
user@athena:~/proj$
我尝试过的其他事情
我试过 SRC_DIR 和 OBJ_DIR 有斜杠但没有,我试过 $(SRC:$(SRC_DIR)%.cpp=$(OBJ_DIR)%.o) 确实 工作,而 $(OBJ) 将有 main.o 和 util。 o,但是我的静态规则 ($(OBJ): $(OBJ_DIR)%.o : $(SRC_DIR)%.cpp) 只会触发 main.cpp,并且不会尝试编译 util.cpp,我正在考虑一个完全独立的问题?
我希望我只是在做一些愚蠢的事情并且有一个简单的解决方法,但我一直在绞尽脑汁,我看不出是什么导致 patsubst 只是空白。任何帮助将不胜感激。
【问题讨论】: