`
ah_fu
  • 浏览: 227867 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

makefile原来是那么简单的东西,为啥教程都那么复杂呢?

阅读更多
    小弟刚刚学LINUX 下的C/C++编程,同事告诉我要用makefile来编译 ,再问之如何写makefile时,答:makefile是很难的东西,你可以使用国外高手写的makefile来编译。
    疑惑中,打开所谓高手的makefile,果然好长,果然看不懂。
    不服气,到网上找一些makefile的教程,尽是些文件依赖、目标之类的理解不了的名次。
   于是,谬论就这样在心中扎根了。

   两星期后,也就是今天,偶然的一个测试让我明白了————makefile实在是很简单,为啥教程都那么复杂呢?
   当然,本文所提到的,是针对初学者的"Hello World!"级别的makefile,并不能否认makefile的高级功能的复杂和强大。我目前所能够理解到的makefile,就是一个批处理程序而已。(如同Linux下的shell文件)
    makefile关键的处理步骤,就是调用编译程序来执行编译,windows下是cl,Linux下是g++。Windows下的make程序是nmake.exe,Linux下是make。

   咱们先写一个简单的C程序:

#include <stdio.h>

int main()
{
    printf("hello world!\n");
    getchar();
    return 1;
}
 

    把这个程序保存为test.cpp。
   在WINDOWS下执行编译(先执行c:\programe files\vs2003\Vc7\bin\vcvars32.bat):cl test.cpp
   在Linux下执行编译:g++ test.cpp

   很简单嘛!
   然后写makefile文件:
anyname:
        cl test.cpp
        #在linux下,上一行写成 g++ test.cpp
        #注意cl这一行:前面的缩进是一个tab键,一定要是tab才可以
       #第一行的anyname可以是任何名字,但是要加上冒号
  在WINDOWS下使用NMAKE编译(先执行c:\programe files\vs2003\Vc7\bin\vcvars32.bat):nmake.exe
  在Linux下使用MAKE编译:make

  呵呵,很简单吧?其实makefile中大多都是变量的定义,最终把这些变量的值作为cl或g++的参数来使用。
   希望任何教程都先展示一个Hello World后在开始传教,对于菜鸟来说,第一次成功的信心是最好的鼓励。
分享到:
评论

相关推荐

    Makefile教程-经典

    或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个...

    makefile教程(中文版).pdf

    或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个...

    makefile 教程.rar

    或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个...

    写makefile文件 教程

    或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个...

    Linux的makefile语法规则

    或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个...

    Makefile中文教程

    的 IDE 都为你做了这个工作,但要做一个好的和 professional 的程序员, makefile 还是要懂。 这就好像现在有这么多的 HTML 的编辑器,但如果你想成为一个专业人士,你还是要了解 HTML 的标识的含义。特别在 Unix 下...

    GNU Make.zip

    或许很多Winodws的程序员都不知道这个东西,因为那些Windows 的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员, makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个...

    新版Android开发教程.rar

    也有分析认为,谷歌并不想做一个简单的手机终端制造商或者软件平台开发商,而意在一统传统互联网和 移 动互联网。----------------------------------- Android 编程基础 4 Android Android Android Android 手机新...

    自己动手写操作系统(含源代码).part2

    首先是操作系统的名字改变了,原因在于虽然我们的试验性 OS从前辈们那里借鉴了很多东西,但其各个部分的设计(比如文件系统和内存管理)往往有其独特之处,所以我将原先的 Tinix(本意为 TryMinix)改成了新名字...

    自己动手写操作系统(含源代码).part1

    首先是操作系统的名字改变了,原因在于虽然我们的试验性 OS从前辈们那里借鉴了很多东西,但其各个部分的设计(比如文件系统和内存管理)往往有其独特之处,所以我将原先的 Tinix(本意为 TryMinix)改成了新名字...

    LinuxC编程一站式学习

    根本没有编译器、链接器、Makefile的概念,甚至连命令行都没用过,然而这些都是初学编程就应该建立起来的基本概念。另一方面,编译器、链接器和C语言的语法有密切的关系,不了解编译器、链接器的工作原理,也不可能...

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    设为clicked(),Receive 设为myDlg,Slot 设为accept()。这样就实现了单击 这个按钮使这个对话框关闭并发出Accepted 信号的功能。下面我们将利用这个 信号。 7.修改主函数main.cpp,如下: #include #include ...

    learning-go:Golang 学习的东西

    Goroutines可以被视为轻量级线程,而channels则允许它们之间的安全通信,实现了CSP(Communicating Sequential Processes)并发模型。 3. **垃圾回收**:Go语言拥有自动的垃圾回收机制,这使得程序员无需手动管理...

    LuaBind 源码 (Lua增强库)

    (都经行同样次数的隐式类型转换),那么将产生一个二义性错误.这将生成一个运行时 错误,程序挂起在产生二义性调用的地方.一个简单的例子是,注册两个函数,一个函数 接受一个int参数,另外一个函数接受一个float参数. ...

Global site tag (gtag.js) - Google Analytics