【问题标题】:build c++ project using Make from two source directories in Linux使用 Make 从 Linux 中的两个源目录构建 c++ 项目
【发布时间】:2021-07-23 00:02:15
【问题描述】:

我在 Linux 中有一个 c++ 项目,其中源文件位于 2 个目录中,如下所示。目前,Makefile只编译source/目录下的文件,不编译"/"目录下的文件.我已经尝试了很多黑客无济于事。编译完source/目录下的源文件后如何指示Makefile编译"/"目录下的源文件,放到obj/ 目录 ? 我尝试了很多东西都无济于事......

欢迎精明的手!!

/ 生成文件 文件1.cpp 文件2.cpp ...

来源/ 文件30.cpp 文件31.cpp ...

对象/ 文件 30.o 文件 31.o ...

CC = g++
CXXFLAGS = -std=c++11 -Wall
LDFLAGS = -pthread

APPNAME = trading_app
EXT = .cpp
SRCDIR = source
OBJDIR = obj

SRC = $(wildcard $(SRCDIR)/*$(EXT))
OBJ = $(SRC:$(SRCDIR)/%$(EXT)=$(OBJDIR)/%.o) 
DEP = $(OBJ:$(OBJDIR)/%.o=%.d)

RM = rm
DELOBJ = $(OBJ)

all: $(APPNAME)

$(APPNAME): $(OBJ)
    @echo "building the executable..."
    $(CC) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)

%.d: $(SRCDIR)/%$(EXT)
    @$(CPP) $(CFLAGS) $< -MM -MT $(@:%.d=$(OBJDIR)/%.o) >$@
 
$(OBJDIR)/%.o: $(SRCDIR)/%$(EXT)
    $(info $$OBJ is [${OBJ}])   
    $(CC) $(CXXFLAGS) -o $@ -c $<

【问题讨论】:

  • 您阅读过GNU make 的文档吗?是online!你读过GCC 的文档吗?是online!您可以下载并学习现有的开源 C++ 软件项目,如 FLTKRefPerSysfish 等以获取灵感...
  • 您也可以使用remake 工具来调试您的Makefile,但您需要先阅读文档
  • Basile,是的,我做到了。事实上,我下载了 GNU Make 手册,并且已经阅读了前 5 章。这个文档真的很好。

标签: c++ linux makefile


【解决方案1】:

好吧,首先你只搜索SRCDIR目录中的文件:

SRC = $(wildcard $(SRCDIR)/*$(EXT))

但不适用于当前目录中的文件。所以 make 当然不会尝试编译当前目录中的源文件。如果你想在当前目录中构建文件,你需要将它们添加到SRC

然后你写一条规则告诉make如何编译SRCDIR子目录下的文件,然后放到OBJDIR子目录下:

$(OBJDIR)/%.o: $(SRCDIR)/%$(EXT)

但你没有规则告诉 make 如何编译当前目录中的文件并将它们放入OBJDIR 子目录。如果你想让 make 知道如何做到这一点,你必须在 makefile 中给它一个规则来做到这一点。

【讨论】:

  • 嗨 MadScientist,我已经尝试过添加当前目录,例如:
  • SRC = $(通配符$(SRCDIR)/*$(EXT)) $(通配符*$(EXT))
  • 它不起作用不是我们可以提供帮助的问题描述。无论如何,我报告说你的 makefile 有两个问题;将源文件添加到SRC 是其中之一,但您必须同时修复两者才能使事情正常进行。
猜你喜欢
  • 1970-01-01
  • 2018-07-17
  • 2010-12-30
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多