【问题标题】:How to generate dependencies with header files from different directories using a Makefile?如何使用 Makefile 生成来自不同目录的头文件的依赖关系?
【发布时间】:2021-03-03 00:17:28
【问题描述】:

我正在尝试将 ASIO 库用于网络项目。我的项目和 ASIO 头文件位于不同的目录中。编译我的 main.cpp(它只包含 asio.hppiostream)工作得很好,但是 ma​​ke depend 命令会产生一个错误提示未找到 asio.hpp。我该如何解决这个问题?

CC = g++
ASIO = -I /Users/user1/Desktop/SDK/asio-1.18.0/include
CFLAGS = -Wall -g -std=c++11 ${ASIO}

SRCS = main.cpp
#SRCS = ${wildcard *.cpp}
OBJS = ${SRCS:.cpp=.o}
INCLS = ${SRCS:.cpp= main.h}

a.out: $(OBJS)
    $(CC) $(CFLAGS) $(OBJS)

$(OBJS):
    $(CC) $(CFLAGS) -c $*.cpp

depend: Makefile.dep
    $(CC) -MM $(SRCS) > Makefile.dep

Makefile.dep:
    touch Makefile.dep

clean:
    rm -f $(OBJS) a.out core a.exe

include Makefile.dep

【问题讨论】:

  • 是否需要在依赖 CC 命令中包含 CFLAGS?
  • 您必须在 Makefile.dep 中有一个过时的依赖项,尝试将这个包含的文件归零。即使您正在尝试构建它,在此之前make 仍将读取其当前内容并尝试解决它。您应该花一些时间来研究 automake 如何处理这种情况。
  • 您绝对应该阅读以下内容:Auto-Dependency Generation。作者(Paul D. Smith)是 GNU make 的主要维护者,我认为你找不到关于这个主题的更好解释。

标签: c++ makefile dependencies boost-asio header-files


【解决方案1】:

这并不神秘:描述在哪里找到标头的选项在这里:

ASIO = -I /Users/user1/Desktop/SDK/asio-1.18.0/include

构建依赖的规则在这里:

depend: Makefile.dep
        $(CC) -MM $(SRCS) > Makefile.dep

注意到有什么遗漏了吗?该命令中不存在用于查找标头的选项。将其更改为:

depend: Makefile.dep
        $(CC) $(ASIO) -MM $(SRCS) > Makefile.dep

【讨论】:

  • 感谢大家的帮助 - 最终解决起来很容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 2018-02-09
  • 2023-04-11
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多