【问题标题】:GNU make compiling all .cpp files to .o and include .h filesGNU make 将所有 .cpp 文件编译为 .o 并包含 .h 文件
【发布时间】:2016-02-01 18:08:36
【问题描述】:

所以我有一个看起来像这样的文件夹

OS
  Makefile
  /include
    head.h
  /src
    main.cpp
    head.cpp
  /objects

如何使用 Makefile 将所有 .cpp 文件编译到 objects 文件夹,然后将所有包含 .h 的 .o 文件编译到我的实际 cpp 程序中。我目前有:

CPP_FILES := $(wildcard src/*.cpp)
H_FILES := $(wildcard include/*.h)
OBJ :=$(wildcard objects/*.o)
LIBS := -Wall
CC := -std=c++14

接下来我要输入什么来将所有这些 .cpp 文件转换为 .o 并在包含 .h 的情况下对其进行编译。谢谢您的宝贵时间

【问题讨论】:

  • 你不应该编译头文件,这些是包括在内的。
  • 我会修正我的陈述。然后我如何包含它们。
  • 您在.cpp 文件中使用#include 语句。
  • 如您所见,.h 文件与我的 main.cpp 位于不同的文件夹中,所以它说找不到它们
  • 将带有适当目录的-I 选项添加到编译器标志。

标签: c++ makefile gnu


【解决方案1】:

您可以为此使用pattern rules(以前称为“后缀规则”)。当您使用 GNU make 时,您可以编写此行来将 src/ 中的所有 .cpp 文件编译为 objects/ 中的 .o 文件,假设 Makefile 位于顶层目录中:

objects/%.o: src/%.cpp
    $(CXX) -c $(CFLAGS) $< -o $@

在 GNU make 语法中,$&lt; 表示依赖项(在这种情况下为 .cpp 文件),$@ 表示目标(目标文件)。

.h 文件不需要编译,只需将正确的包含路径设置为 CFLAGS 变量包含的字符串的一部分:

 CFLAGS += -I./include

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 2012-02-17
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多