zoukankan      html  css  js  c++  java
  • 关于windows下的makefile学习

    文中部分引用自:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=408225

    windows下makefile环境配置见于:http://www.cnblogs.com/cvbnm/articles/1954872.html

    最近我们的助教让我们写一个贪食蛇的小程序,虽然难度并不大,但却对我们的整体编程能力的提高有一定的帮助,其中在他的提供的框架中用到了makefile,我之前代码打了不少,但并没有系统的学习编程,因此对makefile并不了解,今天在网上查了资料后发现windows下的makefile与linux下的makefile有一定的区别,经过几次尝试终于写出了自己的第一个makefile,特此记下。

    首先,单文件的makefile较为简单,这里就不提了,主要是多文件的makefile较难掌握。

    在我的文件中我写了一下几个文件:main.cpp, map.cpp, map.h, makefile(无后缀名,且此文件名不能更改)

    main.cpp:

    // 学习编程的小菜鸟
    // http://www.cnblogs.com/zhuangshq/
    #include <iostream>
    #include "map.h"
    
    using namespace std;
    
    int main() {
        cout << "Hello Makefile!" << endl;
        run();
        return 0;
    }

    map.cpp:

    // 学习编程的小菜鸟
    // http://www.cnblogs.com/zhuangshq/
    
    #include <iostream>
    #include "map.h"
    #ifndef NULL
    #define NULL 0
    #endif // NULL
    
    using namespace std;
    
    void run() {
        // loadMap(1);
        // printMap();
        cout << "make success!" << endl;
    }

    map.h:

    // 学习编程的小菜鸟
    // http://www.cnblogs.com/zhuangshq/
    
    #ifndef MAP_H
    #define MAP_H
    
    // run
    void run();
    
    #endif

    makefile:

    // 学习编程的小菜鸟
    // http://www.cnblogs.com/zhuangshq/
    
    test: main.o map.o
        g++ main.o map.o -o test
    main.o: main.cpp
        g++ -c main.cpp -o main.o
    map.o: map.cpp
        g++ -c map.cpp -o map.o
    clean:
        rm *.o *.exe

    以上代码实现在main.cpp中调用map.cpp中的run函数,在下面我们来分析makefile的内容:

    根据makefile的语法,

    target ... : prerequisites ... 
                command 
                ... 
                ... 

        target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label)。 

        prerequisites就是,要生成那个target所需要的文件或是目标。 

        command也就是make需要执行的命令。(任意的Shell命令) 

    那么我们的第一行生成的目标文件就是test.exe,而test.exe是由main.o和map.o生成的,接下来的两个语段分别生成了main.o和map.o

    接下来我们只需要在上述文件所在的文件夹中打开命令行窗口并执行nmake命令即可生成test.exe,执行nmake clean命令即可删除生成的文件。

  • 相关阅读:
    Xtrabackup的安装
    在 CentOS 7上Virtualbox+phpVirtualBox完整虚拟化环境部署
    用分离、附加的方式实现sql server数据库的备份和还原
    Oracle 11g透明网关连接Sqlserver
    硬盘SMART检测参数详解[转]
    安装了 R2 Integration Servic 之后,SQL Server 2008 Management Studio报错
    jenkins获取git上的源码
    CentOS7配置防火墙
    CentOS 7 安装 Oracle 11.2.0.4
    oralce 11.2.0.4手动创建EM
  • 原文地址:https://www.cnblogs.com/zhuangshq/p/5080224.html
Copyright © 2011-2022 走看看