Intro to Makefile

Abstract

This blog will show you how to write a “makefile” file.

1. Concept

A makefile is a file containing a set of directives, directing a complier to link a program in a certain order.

2. An Example

file1.h

#ifndef file1_h
#define file1_h

void tool1(char *);
void tool1(const char *);

#endif

file1.cpp

#include <stdio.h>
#include "file1.h"

void tool1(char *str){
    printf("This is file1 print: %s\n",str);
}

void tool1(const char *str){
    printf("This is file1 print: %s\n",str);
}

file2.h

#ifndef file2_h
#define file2_h

void tool2(char *);
void tool2(const char *);

#endif

file2.cpp

#include <stdio.h>
#include "file2.h"

void tool2(char *str){
    printf("This is file2 print: %s\n",str);
}

void tool2(const char *str){
    printf("This is file2 print: %s\n",str);
}

main.cpp

#include <stdio.h>
#include <stdlib.h>
#include "file1.h"
#include "file2.h"

int main(){

    char str1[] = "hello";
    tool1(str1);
    const char str1_c[] = "hello";
    tool1(str1_c);

    char str2[] = "hello";
    tool2(str2);
    const char str2_c[] = "hello";
    tool2(str2_c);
}

makefile

CC := g++
CFLAGS := -g
TARGET := target
SRCS := $(wildcard *.cpp)
OBJS := $(patsubst %cpp,%o,$(SRCS))

all:$(TARGET) clean

%.o:%.cpp
    $(CC) $(CFLAGS) -c $<

$(TARGET):$(OBJS)
    $(CC) $(CFLAGS) -o [email protected] $^

clean:
    rm -rf *.o

3. Reference

https://github.com/Canhui/C-Plus-Standard-By-Practice/tree/master/Project_1_Makefile

http://blog.csdn.net/wallwind/article/details/6791505

http://wenku.baidu.com/link?url=P2odKaCA4zRTieikBQoaSD77YBOQTbnG0D3VHxNdTJDTsitCNsKdrZIgxfRfW2vrdpPFhfMuHfWJHfwDPWFrTT-KnXD7GBJBTxYvSxiRDh3

时间: 2024-11-05 22:32:14

Intro to Makefile的相关文章

[转]http://makefiletutorial.com/

Intro This makefile will always run. The default target is some_binary, because it is first. some_binary: echo "nothing" Intro This file will make some_binary the first time, and the second time notice it’s already made, resulting in make: 'some

Linux内核Makefile文件(翻译自内核手册)

转载自:http://www.cnblogs.com/jason-lu/p/3728198.html --译自Linux3.9.5 Kernel Makefiles(内核目录documention/kbuild/makefiles.txt) kbuild(kernel build) 内核编译器 This document describes the Linux kernel Makefiles 本文当介绍了Linux内核的Makefile === Table of Contents=== 目录

kernel makefile

===Documentation/kbuild/makefiles.txt=== The Makefiles have five parts: Makefile                               the top Makefile. .config                                  the kernel configuration file. arch/$(ARCH)/Makefile         the arch Makefile.

Makefile学习(三)[第二版]

make常用内嵌函数 1.函数调用 $(function arguments) #$引用的结果就是函数生成的结果 2.Makefile下常用的函数 1)$(wildcard PATTERN) #匹配当前目录下的文件 例如:src=$(wildcard *.c) #匹配当前目录下所有的.c文件 2)$(patsubst PATTERN,REPLACEMENT,TEXT) #模式替换函数 例如:$(patsubst %.c,%.o,$src) #等价于$(src:%.c=%.o)[常用] 3)she

Linux Kernel的Makefile与Kconfig文件的语法

https://www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt Introduction ------------ The configuration database is a collection of configuration options organized in a tree structure: +- Code maturity level options | +- Prompt for developme

Makefile学习(三)

 make常用内嵌函数 1.函数调用 $(function arguments) #$引用的结果就是函数生成的结果 2.Makefile下常用的函数 1)$(wildcard PATTERN) #匹配当前目录下的文件 例如:src=$(wildcard *.c) #匹配当前目录下所有的.c文件 2)$(patsubst PATTERN,REPLACEMENT,TEXT) #模式替换函数 例如:$(patsubst %.c,%.o,$src) #等价于$(src:%.c=%.o)[常用] 3)

关于makefile中变量的多次赋值以及override指令

1 基本原则如下 1.1 原则1 变量的普通赋值是有先后顺序的,后面的赋值会覆盖掉前面的赋值. 1.2 原则2 使用的时候,用的是其前面最后的赋值,就算其后面有使用了override指令的赋值也不会影响这条原则. 1.3 原则3 当使用了override指令定义赋值了变量后,其后对该变量的所有的赋值都是无效的.但是override之前的所有的赋值都是有效的.使用的时候是往前最近原则. 2 override变量.命令行参数和普通变量之间的屏蔽关系 override变量会屏蔽命令行参数,除非用+=:

使用Makefile去管理程序

前言:在gcc中如何使用分屏操作  : 在命令行中使用    : sp + filename     vim  Makefile  编辑make工程   第一行使用 # 进行注释   说明是什么make  内容格式:  目标文件:  依赖文件 ·  ·  ·  但是一定要注意如果要使用编译指令一定要用table键 不能使用几个空格代替 另外  max.h 和min.h 的内容就是函数声明 下面说下这样make的好处吧:  在大型程序中能很好帮我们管理我们的代码和项目,程序的任何部分分工都很明确,

Contiki 2.7 Makefile 文件(三)

2.第二部分 这里的usage,targets,savetarget,savedefines都是伪目标. 和all不同,这些伪目标不会被执行,除非显式指定这些目标. 这里有两个目标savetarget,savedefines前边我们提过. 通过命令 make TARGET=esb savetarget可以保存默认的TARGET到Makefile.target中. 通过命令 make TARGET=esb DEFINES=MYTRACE,MYVALUE=4711 savedefines 可以保存默