makefile中使用函数

一 编译需要的文件

1 file1.h

#ifndef FILE1_H_
#define FILE1_H_
#ifdef __cplusplus
    extern "C" {
       #endif
       void File1Print();
       #ifdef __cplusplus
    }
    #endif
#endif

2 file1.cpp

#include <iostream>
#include "file1.h"
using namespace std;
void File1Print(){
    cout<<"Print file1**********************"<<endl;
}

3 file2.cpp

#include <iostream>
#include "file1.h"
using namespace std;
int main(){
    cout<<"Print file2**********************"<<endl;
    File1Print();
    return 0;
}

二 makefile中使用函数

CC = gcc
XX = g++
CFLAGS = -Wall -O -g
TARGET = helloworld

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

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

SOURCES = $(wildcard *.c *.cpp)
OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCES)))

$(TARGET) : $(OBJS)
    $(XX) $(OBJS) -o $(TARGET)
clean:
    rm -rf *.o helloworld

三 编译

[root@localhost 0405]# make
g++ -Wall -O -g -c file1.cpp -o file1.o
g++ -Wall -O -g -c file2.cpp -o file2.o
g++ file1.o file2.o -o helloworld
[root@localhost 0405]# ll
total 100
-rw-r--r--. 1 root root   140 May  1 08:52 file1.cpp
-rw-r--r--. 1 root root   170 May  1 08:52 file1.h
-rw-r--r--. 1 root root 26488 May 11 09:43 file1.o
-rw-r--r--. 1 root root   167 May  1 08:52 file2.cpp
-rw-r--r--. 1 root root 24136 May 11 09:43 file2.o
-rwxr-xr-x. 1 root root 31520 May 11 09:43 helloworld
-rw-r--r--. 1 root root   328 May  1 08:52 Makefile

四 说明

1 $(wildcard PATTERN...):在makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。SOURCES = $(wildcard *.c *.cpp)表示产生一个所有以.c、.cpp结尾的文件列表,然后存入变量SOURCES里。

2 patsubst函数,用于匹配替换,有3个参数。第一个是一个需要匹配的样式,第二个表示用什么来替换它,第三个是一个需要被处理的由空格分割的列表。比如:$(patsubst %.c %o,$(dir)),是指把$(dir)中符合后缀是 .c的全部替换为.o。OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCES)))的意思是把文件列表中所有.c、.cpp字符变成.o,形成一个新的文件列表,然后存入OBJS变量中。

3 下面几句表示把所有的.c和.cpp文件编译成.o文件

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

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

$@:扩展成当前规则的目的文件名。

$<:扩展成依靠列表中的第1个依靠文件。

$^:扩展成整个依靠的列表。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值