c++ - 为 C++ 程序创建一个健壮的 Makefile

标签 c++ linux gcc makefile

考虑以下简单的 Makefile。请注意,有两个类,每个类都有对应的 .h 和 .cpp 文件。

output: main.o class1.o class2.o
    g++ main.o class1.o class2.o -o output

main.o: main.cpp
    g++ -c main.cpp

class1.o: class1.cpp class1.h
    g++ -c class1.cpp

class2.o: class2.cpp class2.h
    g++ -c class2.cpp

clean:
    rm *.o output 

这个 Makefile 是否可靠?我怎样才能让它更健壮?有人可以提供此 Makefile 的更强大版本吗?它将在 64 位 Red Hat Linux 或 CentOS 机器上运行。

如果重要,我正在使用:

-gcc --version 4.8.4(来自 GNU 编译器集合)

-GDB版本:GNU gdb (Ubuntu 7.7.1 -0ubuntu5~14.04.2) 7.7.1

最佳答案

我不认为您的原始 makefile 离题很远。我刚刚做了一些补充:

  1. 添加了一个默认的 all 目标 - 最好是明确的
  2. 在对 g++ 的所有调用中使用 CXXFLAGS 环境变量
  3. 使 main.o 依赖于 class1.hclass2.h ,如讨论的那样
  4. 指定 clean 是一个 PHONY 目标,以便在您添加名为 clean 的构建工件时安全起见

ALL := output

all : $(ALL) 

output: main.o class1.o class2.o
    g++ $(CXXFLAGS) main.o class1.o class2.o -o output

main.o: main.cpp class1.h class2.h
    g++ $(CXXFLAGS) -c main.cpp

class1.o: class1.cpp class1.h
    g++ $(CXXFLAGS) -c class1.cpp

class2.o: class2.cpp class2.h
    g++ $(CXXFLAGS) -c class2.cpp

.PHONY : clean

clean:
    rm *.o output 

关于c++ - 为 C++ 程序创建一个健壮的 Makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36142441/

相关文章:

python - 接触函数的数值分析-表示形状的最有效,最简单的方法

c++ - 随着线程数的增加,Lua 会扼杀多线程性能(包括条形图)

.net - 使用 Windows 身份验证从 Mono 调用 WCF 服务

linux - 随后将具有不同视觉效果的 GLX 上下文附加到同一个 X 窗口

c - GCC Xml 替代品

c++ - Github 错误识别项目中使用的编程语言

java - 如何在 Java 中使用等效于 C++ 的引用参数?

linux - 通过使用 pidof 确定进程 ID 来终止 unix 进程

从其他依赖目标文件创建目标文件

gcc - 在 Linux 主机上针对各种目标进行交叉编译