如何在配方中使用自变量调用自定义函数并返回值?

时间:2020-07-30 20:16:02

标签: makefile

我的工作目录如下:

src/my_module/main.c
src/my_module/inc/my_header.h
obj/my_module

main.c包括my_header.h

在我的makefile中,函数GET_INC应该基于当前模块返回包含文件。不幸的是,尽管Internet中存在类似的问题描述,但我无法正确处理返回值。

请考虑以下非常简单的示例:

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仍为空。我有以下问题:

  1. 如何将GET_INC的输出存储在变量X中,然后将其传递给编译器?
  2. 我想知道这种解决方案是否有效,因为我为每个.c文件调用了相同的函数。由于INC取决于当前路径,因此我不能在规则之外调用它。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您的代码似乎可以正常工作,除了最后一行应该是:

async def create_user(request: Request) -> JSONResponse:
    data = await request.json()
    query = User.__table__.insert().values(name=data["username"])
    await database.execute(query)

    # I need the LAST INSERT ID here

出于调试目的,您可以尝试:

$(CC) $< -o $@ -I $$INC;

答案 1 :(得分:0)

(您已经遗漏了一些重要的细节,因此我必须做出一些有根据的猜测。)

如果构建inc目录路径的函数可以正常工作(看来确实可以),那么您可以使用它所需要的东西(对象路径的一部分?将其命名为{{1}) }),在模块级别计算路径并将其传递给对象规则。

MODULE