makefile编写

假设现在有一个add.cpp,add.h,main.cpp这三个文件,文件内容如下:

add.cpp:

add.h:

main.cpp:


现在需要编写makefile文件将add.cpp和main.cpp这两个文件进行编译

首先在终端输入vim makefile

makefile文件的内容如下:

main: main.o add.o
	g++ main.o add.o -o main
main.o: main.cpp add.h
	g++ -c main.cpp -o main.o
add.o: add.cpp add.h
	g++ -c add.cpp -o add.o
clean:
	rm -rf *.o main

 编写完之后在终端输入make即可编译

最后一行的clean的作用是删除编译生成的.o文件和main程序,当用户键入make clean命令时,会删除*.o 和main文件,这样我们想重新编译的时候就可以执行命令: make clean; make。

升级:

可以在makefile加入打印的信息,或者用变量来替换一些文件名:

OBJS = main.o add.o

main: $(OBJS)
	g++ $(OBJS) -o main
	@echo "testing"
main.o: main.cpp add.h
	g++ -c main.cpp -o main.o
add.o: add.cpp add.h
	g++ -c add.cpp -o add.o
clean:
	rm -rf *.o main
	@echo "deleting"

例如上面将main.o add.o用OBJS变量表示,当需要用到main.o add.o时,用$(OBJS)替代

另外用@echo打印信息,echo前面带了@表示不要打印执行该命令时候命令本身的输出,比如
rm -rf *.o main在执行的时候会输出这句命令"rm -rf *.o main" 如果把rm改为@rm,
再make clean的时候就不会输出"rm -rf *.o main"命令本身了

可以使用一些预定义变量

 $@ :    冒号左边要生成的对象名称
                例:main: main.o add.o
                 $@指的就是其中的main
$<   :  冒号右边第一个依赖对象,即上面命令中的main.o
$^   :   冒号右边所有的依赖对象,即上面命令中的main.o add.o

例如:

OBJS = main.o add.o

main: $(OBJS)
	g++ $(OBJS) -o main
	@echo $@
	@echo $<
	@echo $^
main.o: main.cpp add.h
	g++ -c main.cpp -o main.o
add.o: add.cpp add.h
	g++ -c add.cpp -o add.o
	@echo $@
	@echo $<
	@echo $^
clean:
	rm -rf *.o main
	@echo "deleting"

输入make之后打印终端显示出来的结果为:

g++ -c main.cpp -o main.o
g++ -c add.cpp -o add.o
add.o  (注:$@)
add.cpp (注:$<)
add.cpp add.h (注:$^)
g++ main.o add.o -o main
main(注:$@)
main.o(注:$<)
main.o add.o (注:$^)

所以我们可以用预定义变量简化makefile的编写:

将上述makefile用预定义变量替换后为:

OBJS = main.o add.o

main: $(OBJS)
	g++ $^ -o $@
main.o: main.cpp add.h
	g++ -c $< -o $@
add.o: add.cpp add.h
	g++ -c $< -o $@
clean:
	rm -rf *.o main
	@echo "deleting"

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值