【问题标题】:patsubst in GNU make returns nothingGNU make 中的 patsubst 不返回任何内容
【发布时间】: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 只是空白。任何帮助将不胜感激。

【问题讨论】:

    标签: c++ makefile


    【解决方案1】:

    与(几乎)所有编程语言一样,makefile 区分大小写。 $(FOO)$(foo) 不同,$(PATSUBST ...)$(patsubst ...) 不同。

    其实$(PATSUBST ...) 什么都不是,扩展为空字符串。

    【讨论】:

    • 天哪,不知道为什么我用大写字母输入,甚至没有注意到,谢谢?
    猜你喜欢
    • 2020-04-27
    • 2019-04-06
    • 2012-02-15
    • 2020-09-07
    • 2021-11-22
    • 2015-11-06
    • 2013-11-14
    • 2014-03-23
    • 2012-08-25
    相关资源
    最近更新 更多