【问题标题】:Creating/improving a makefile创建/改进makefile
【发布时间】:2013-06-23 04:21:04
【问题描述】:

我有以下生成文件:

CC = g++
CFLAGS=-c -Wall


all: myProgram

myProgram: obj/main.o obj/Class1.o obj/Class2.o 
    $(CC) -o bin/myProgram obj/main.o obj/Class1.o obj/Class2.o 

obj/main.o: main.cpp  
    $(CC) $(CFLAGS) main.cpp -o obj/main.o

obj/Class1.o: src/Class1.cpp
    $(CC) $(CFLAGS) src/Class1.cpp -o obj/Class1.o

obj/Class2.o: src/Class2.cpp
    $(CC) $(CFLAGS) src/Class2.cpp -o obj/Class2.o

我的想法是我有这样的文件/目录结构:

/project
    Makefile
    main.cpp
    /src
        Class1.cpp
        Class2.cpp
    /obj
        Class1.obj
        Class2.obj
    /bin
        myProgram
    /inc
        Class1.h
        Class2.h

makefile 获取这些目录中的源文件和目标文件,并将它们作为myProgram 输出到/bin 中。

我知道我的 makefile 可能看起来不太理想,但无论如何。我想学习如何创建 makefile,那么您建议我将什么添加到我的 makefile 中,或者作为下一步进一步了解 makefile 以提高我的知识? (我可能正在做一个需要了解 makefile 的项目,所以我正在努力学习它们)

【问题讨论】:

  • 您的问题可能会被关闭,因为它只会引起争论。将 Makefile 缩放到多个目录中的复杂项目并不是世界上最简单的事情,而且我见过很多人这样做的方法。如果可以的话,把你的团队和你自己带到 SCons。如果您需要坚持使用它们,请检查 gmake 扩展并找出更轻松地完成您想要的事情的方法。
  • 另外,你的 Makefile 没有考虑到头文件的依赖。 Makefiles 不会自动执行此操作,但有一些“简单”的编译器相关的方式来执行此操作...
  • CC = g++ - 不。 CC = gcc。如果你想要 C++,那就是CXX
  • CXXCXXFLAGS 用于 C++。

标签: c++


【解决方案1】:

这是我为C创建的通用Makefile,它可以很容易地适应C++

Generic Makefile for Linux

这里有一个关于how to write a makefile 的很棒的教程。

【讨论】:

  • Robert 如果我尝试或多或少地学习 Michael Safyan 的教程,是否允许我说我可以为“中等”大小的项目创建 makefile?
  • 取决于您认为的中等大小。 Linux 内核使用手写的 makefile。
  • Robert,我很好奇在阅读/理解本教程后我能说我对 makefile 了解多少?喜欢本教程的学习成果是什么?谢谢。
  • 如果您阅读了本教程以及教程中链接的“Recursive Make Considered Harmful”文档,您将对 makefile 工作原理的原理有深刻的理解,以及手动编写有用的 makefile 的能力。
  • @Robert S. Barnes:谢谢。
【解决方案2】:

这是一个相当笼统的问题..但让我看看我是否可以用小方法回答它

  • 目标称为 clean - 必要
  • 递归 makefile 可能有助于学习
  • 您应该使用包含 cpp 文件和 obj 文件列表的变量,并尽量避免将它们输入。

试试genmake.pl,它提供了一个不错的默认结构。

【讨论】:

  • 感谢您的反馈,是的,我对这类东西很感兴趣,也许将来要学习什么来提高我在 makefile 方面的知识,因为我可能需要使用它们(可能不适用于非常小的项目)
猜你喜欢
  • 1970-01-01
  • 2021-05-19
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
  • 2012-12-20
相关资源
最近更新 更多