makefile - 如何在配方中使用参数调用自定义函数并返回值?
问题描述
我的工作目录如下所示:
src/my_module/main.c
src/my_module/inc/my_header.h
obj/my_module
main.c
包括my_header.h
.
在我makefile
的函数GET_INC
应该返回基于当前模块的包含文件。不幸的是,我无法正确处理返回值,虽然网上也有类似的问题描述。
请考虑这个非常简单的例子:
OBJ=obj/my_module/main.o
# The original function is more complicated. In the end it echos a variable with all includes.
GET_INC = $$(X=src/$1/inc; \
echo "$$X";)
prog: $(OBJ)
@echo "$@ built."
# At first, we compute module name (here: my_module), which is then passed to GET_INC.
obj/%.o: src/%.c
@module=$$(echo $* | cut -d'/' -f1); \
INC=$(call GET_INC,$$module); \
$(CC) $< -o $@ $$INC;
不幸的是,变量 INC 仍然为空,即使函数调用有效。我有以下问题:
- 如何将 的输出存储
GET_INC
在变量中X
,然后将其传递给我的编译器? - 我想知道这个解决方案是否有效,因为我为每个 .c 文件调用相同的函数。由于
INC
取决于当前路径,我不能在规则之外调用它。有什么建议么?
解决方案
您的代码似乎可以工作,除了最后一行,应该是:
$(CC) $< -o $@ -I $$INC;
出于调试目的,您可以尝试:
echo $(CC) $< -o $@ -I $$INC;
推荐阅读
- mysql - 指定 schema.sql 和 data.sql 后,无法使用 Spring Boot 创建 MySQL 表并在其中加载初始数据
- gmail - gmail“或”搜索返回的结果少于其中一个搜索词本身
- python - 具有概率的python列表/字典
- react-native - 从 AsyncStorage 检索数据失败
- python - TypeError: 不支持的操作数类型 -: 'datetime.datetime' 和 'int'
- elasticsearch - GraphQL vs Elasticsearch 我应该使用什么来获得返回许多不同模式的快速搜索性能?
- wordpress - Visual Composer 安装主题后返回错误?
- python - 创建向特定点增加的随机数据
- javascript - 如何在与 li 相同的行上创建删除按钮删除位于同一行的 li
- python - 如何在 Visual Studio 2017 中使用 pyuic5