makefile学习

Posted xasz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了makefile学习相关的知识,希望对你有一定的参考价值。

概念

【编译】

把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File。

——编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。

——有时我们会对某些中间目标文件打个包便与复用,在Windows下这种包叫“库文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。

【链接】

大量的Object File合成执行文件,这个动作叫作链接(link)。

——在所有的Object File中找寻函数的实现,如果找不到,那到就会报链接错误码。

【makefile基本规则】

target ... : prerequisites ...
\\tcommand

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

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

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

【基础版本】

先来看个例子,用来实现接收命令行参数并打印。CmdLine类用来解析存储参数,SwmPack用来打印。

//main.cpp
//程序入口

#include <iostream>
#include "CmdLine.h"
#include "SwmPack.h"

int main(int argc, char* argv[])

    CmdLine cmdLine;
    cmdLine.Parse(argc, argv);
    SwmPack swmPack;
    swmPack.Run(cmdLine);

    return 0;

 

//CmdLine.h
//命令行解析头文件

#ifndef TMAKE_CMDLINE_H
#define TMAKE_CMDLINE_H

#include <vector>
#include <string>
using namespace std;

class CmdLine 

public:
    CmdLine() = default;
    void Parse(int argc, char* argv[]);
    vector<string> Get() const;
private:
    vector<string> vargs_;
;

#endif


//CmdLine.cpp
//命令行解析实现

#include "CmdLine.h"

void CmdLine::Parse(int argc, char* argv[])

    vargs_.clear();
    for (auto index = 0; index < argc; index++) 
        vargs_.push_back(*(argv+index));
    


vector<string> CmdLine::Get() const

    return vargs_;

 

//SwmPack.h
//操作头文件

#ifndef TMAKE_SWMPACK_H
#define TMAKE_SWMPACK_H
#include "CmdLine.h"

class SwmPack

public:
    SwmPack() = default;
    void Run(const CmdLine& cmdLine);
;
#endif


//SwmPack.cpp
//操作实现

#include <iostream>
#include "SwmPack.h"

using namespace std;


void SwmPack::Run(const CmdLine& cmdLine)

    vector<string> vargs = std::move(cmdLine.Get());
    for (auto arg : vargs) 
        cout<<arg<<endl;
    

 

//makefile

main : main.o CmdLine.o SwmPack.o
    g++ -o main main.o CmdLine.o SwmPack.o -g -Wall -std=c++11
main.o : main.cpp CmdLine.h SwmPack.h
    g++ -c main.cpp -g -Wall -std=c++11
CmdLine.o : CmdLine.cpp
    g++ -c CmdLine.cpp -g -Wall -std=c++11
SwmPack.o : SwmPack.cpp CmdLine.h
    g++ -c SwmPack.cpp -g -Wall -std=c++11
clean:
    rm -rf main.o CmdLine.o SwnPack.o main

技术图片

 

以上是关于makefile学习的主要内容,如果未能解决你的问题,请参考以下文章

Makefile学习----初步理解

gdbmake/makefile学习心得

gdbmake/makefile学习心得

Makefile学习笔记

Linux学习记录:Makefile

[转]Linux学习笔记——例说makefile 头文件查找路径