【问题标题】:Running library makefile from application makefile从应用程序 makefile 运行库 makefile
【发布时间】:2020-12-24 09:44:06
【问题描述】:

我有一个使用我的库的应用程序。对于这两个项目,我都有单独的生成文件

我的应用程序(源代码 + Makefile)位于“客户端”文件夹中。在同一级别,我有库文件夹“mylib”。

客户端应用程序的 make 文件如下所示:

LIBS = -L../mylib -lmy
CFLAGS = -Wall -W -I../mylib

TARGET   = clientapp
SOURCEDIR = .
SOURCES = $(wildcard $(SOURCEDIR)/*.c)
OBJECTS = $(SOURCES:.c=.o)

all: $(TARGET)
$(TARGET): $(OBJECTS)
    $(CXX) $(CFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS) $(LDFLAGS) -Wl,-rpath=../mylib
clean:
    rm -f $(OBJECTS) $(TARGET)

目前要使一切正常工作,我首先需要转到库文件夹,在那里调用 make,然后转到客户端应用程序文件夹并在此处调用 make。

我想做的是运行客户端应用程序的 makefile 中的所有内容。 我发现我需要使用'recursive make'。 但我不能让它建立一切。唯一的库已构建。

什么是正确的语法?

【问题讨论】:

  • 您可能对BismonRefPerSys 感兴趣。请随时给我发送电子邮件(英文或俄文)至basile@starynkevitch.net。阅读Recursive make considered harmfulGNU makeGCC 的文档。试试make -p。使用remake
  • 如果您需要帮助,您必须向我们展示您是如何调用子制作的。拥有客户端 makefile 很有用,但如果没有递归调用,我们真的不能说太多。另外,请提供更详细的问题说明。
  • 不要。如果您有库,请安装它。然后在您的客户端 makefile 中,链接到已安装的库。
  • @WilliamPursell 这不是第 3 方库。我不想安装它
  • @amplifier 如果您不想安装它,请停止将其称为库。如果它是一个库,请将其视为一个独特的项目。如果您希望它成为一个项目的组件,请不要将其称为库。

标签: c ubuntu gcc makefile gnu-make


【解决方案1】:

虽然从长远来看递归 make 并不是最好的解决方案,但如果您刚刚开始,它是一个可行的选择。

在顶层你只需要创建一个只执行你现有的两个 makefile 的新 Makefile

.PHONY: all
all:
    $(MAKE) -C mylib
    $(MAKE) -C source

(显然,缩进应该是制表符)

这将在各自的目录中执行两个 makefile。

最好包含 makefile 并且是非递归的,但这需要更多的 make 知识。一步一个脚印。

【讨论】:

  • 如果您想了解有关 make 的更多信息,请查看 Managing projects with GNU Make
  • 您的-f 选项不在这里:更改目录发生在文件打开之前,因此您应该使用-f Makefile,或者,因为这是默认设置,所以完全不使用该选项。跨度>
  • @MadScientist,f 选项确实不正确。更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-16
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
相关资源
最近更新 更多