c++ - 包含两个 .cpp 文件和一个头文件的基本 Makefile

标签 c++ makefile

我想学习如何为我的程序创建包含 3 个文件的基本 Makefile:a.cpp、b.cpp 和 b.h。我将 b.h 包含在 a.cpp 中,并调用一个在此处声明并在 b.cpp 中定义的函数。我浏览了几个 Makefile 教程并想出了一个像这样的 Makefile:

CC=g++
CFLAGS= -std=c++11 -Wall -pedantic -g
SOURCES= a.cpp b.cpp
DEPS= b.h
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=exec

all: $(EXECUTABLE)
    @echo Make has finished.

$(EXECUTABLE): $(OBJECTS)
    $(CC) $(CFLAGS) $(OBJECTS) -o $(EXECUTABLE)

%.o: %.cpp $(DEPS)
    $(CC) $(CFLAGS) -c -o $@ $<

clean: 
    $(RM) *.o *~ $(EXECUTABLE)

但是,当我创建并运行 exec 时,它并没有按预期工作。编译器不会给出任何警告或错误,但会跳过 a.cpp 中的函数调用,就好像它不存在一样。相反,如果我运行简单的

g++ -std=c++11 -Wall -pedantic -g a.cpp b.cpp -o exec

我的程序按预期运行。显然我在我的 Makefile 中没有做正确的事情,但我不知道是什么。

最佳答案

CC=g++
CFLAGS= -std=c++11 -Wall -pedantic -g
SOURCES= a.cpp b.cpp
DEPS= b.h
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=exec

all: $(EXECUTABLE)
    @echo Make has finished.

$(EXECUTABLE): $(OBJECTS)
    $(CC)  $(OBJECTS) -o $@

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

clean: 
    $(RM) *.o *~ $(EXECUTABLE)

关于c++ - 包含两个 .cpp 文件和一个头文件的基本 Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37952230/

相关文章:

c# - ASP.Net上的jpegoptim- “error opening temporary file”

c++ - 为什么 std::weak_ptr 没有 move 构造函数或 move 赋值运算符?

c++ - Arduino类重新定义错误

c - 如何在 C Makefile 中使用外部库和头文件?

c++ - 如何编译多个子目录下的所有cpp文件?

compilation - 检查 makefile 中的文件大小,如果文件太短则停止

C++ 三元运算符

c++ - 使用模板类的函数重载

c - 生成文件别名

linux - 如何只重新编译单个内核模块?