使用VScode学习makefile遇到的问题

使用VScode学习makefile遇到的问题

1.使用makefile 的shell 函数 find命令查找文件时一直出错

文件目录

Makefile 文件和文件夹src和文件add.cpp都在
D:\Program Files\Microsoft VS Code\codeProject\Test 路径下

在这里插入图片描述

最初报错

  • Makefile文件内指令:
cpp_srcs := $(shell find src -name *.cpp)
debug:
	@echo $(cpp_srcs)
  • 执行:(我的make指令是mingw32-make)
mingw32-make debug
  • 报错:
    在这里插入图片描述
  • 在终端直接使用find命令时,通过find /? 出现的提示为:
    在这里插入图片描述

所以这里的find应该不是shell 中的find,这里的find是从某个文件里搜索字符串

改用shell cat试一下

  • 直接在终端使用cat 可以正常获取内容
    在这里插入图片描述

  • Makefile文件中指令

cpp_srcs := $(shell cat add.cpp)
debug:
	@echo $(cpp_srcs)
  • 执行
mingw32-make debug
  • 报错
    在这里插入图片描述

2. mkdir时提示命令语法不正确

简述:终端使用 mkdir -p obj/ 能够成功创建文件夹obj。在makefile中使用dir函数的指令 $(dir $@)也能够正确获取$@中的路径,但是@mkdir -p $(dir $@) 报错语法不正确。

  • 目的:创建.o存放的文件夹

    obj/add.o : add.cpp
     @echo $(dir $@)
     @mkdir -p $(dir $@)
     @g++ -c $^ -o $@
    
    • 报错:
      在这里插入图片描述
  • @mkdir -p $(dir $@)替换为mkdir -p obj/

    obj/add.o : add.cpp
     @echo $(dir $@)
     @mkdir -p obj/
     @g++ -c $^ -o $@
    

    能够成功创建:
    在这里插入图片描述

    在这里插入图片描述

3. 动态库连接指令

  • 问题: makefile文件的链接生成可执行文件部分找不到库文件

在这里插入图片描述
- 链接部分的makefile内容:
makefile workspace/exec : objs/main.o @echo $^ -o $@ $(linking_options) @g++ $^ -o $@ $(linking_options)
输出值:(libanm.so在当前目录的lib文件夹里)
在这里插入图片描述
红框1是将指令打印出来,红框2为报错结果

  • 尝试一下在终端直接使用g++指令:但是显示缺少参量,主要在 -Wl,-rpath=./lib中的逗号上
    在这里插入图片描述

附:整个makefile文件,

cpp_srcs := src/add.cpp src/minus.cpp src/main.cpp 
#$(shell find src -name *.cpp)  shell find 找不到cpp
cpp_objs := $(patsubst src/%.cpp,objs/%.o,$(cpp_srcs))
so_objs := $(filter-out objs/main.o, $(cpp_objs))  

include_paths := ./include
library_paths :=./lib

linking_libs := anm  # 库名称

I_options   := $(include_paths:%=-I%)
l_options   := $(linking_libs:%=-l%)
L_options   := $(library_paths:%=-L%)
r_options   := $(library_paths:%=-Wl,-rpath=%)

compile_options := -g -O3 -w -fPIC $(I_options)
linking_options :=  $(L_options) $(l_options) $(r_options)

makefoder : 
	@mkdir  objs 
	@mkdir  lib
	@mkdir  workspace

#这里有个循环,因为.cpp不止一个,将文件夹创建拿出
objs/%.o : src/%.cpp  makefoder
	@g++ -c $< -o $@ $(compile_options)


lib/libanm.so : $(so_objs)
	@g++ -shared $^ -o $@

dynamic : lib/libanm.so
	@echo "share_library created successfully!"

workspace/exec : objs/main.o  dynamic
	@echo $^ -o $@ $(linking_options) 
	@g++ $^ -o $@ $(linking_options) 

run : workspace/exec  
	@./$<

debug :
	@echo $(so_objs)

clean :
	@del -rf lib objs workspace

.PHONY : debug  clean run

运行run后除了workspace/exec部分其他都已正常完成,得到文件目录:

Test
|-include
|	|-add.hpp
|	|-minus.hpp
|-lib
|	|-libanm.so
|-objs
|	|-add.o|
|	|-main.o
|	|-minus.o
|-src
|	|-add.cpp
|	|-main.cpp
|	|-minus.cpp
|-workspace
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值