十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
最近把Makefile
知识补上了。虽然现在项目都是使用cmake
、xmake
管理了,但Makefile
还是要学学的,因为cmake
、xmake
里面使用的概念、变量都是Makefile
中出现过的,有助于理解高级工具。
作者的目录是这样的,
很简单的配置,这里毕竟也只是在写写Leetcode、试试语言特性的时候会用到。
过程描述及代码:ifeq ($(FILE_NUM),single)
成立,则取最新的.cpp文件名,只编译这一个文件$(TARGET):$(OBJS)
中#作者的默认配置
TARGET = main
OBJS:= $(patsubst %.cpp,%.o,$(wildcard ./*.cpp)) #当前路径的.cpp转换为.o
NEWEST_FILE:=$(patsubst %.cpp,%.o,$(shell ls -lt | grep -Eo "\b\w+\.(cpp|c)" | head -n 1)) #获取最新的文件
ifeq ($(FILE_NUM),single)
OBJS:= $(NEWEST_FILE)
endif
LDFLAGS:=
LIBS:=
CXXFLAGS:= -std=c++17 -O2 -m64
BUILD_EXIST = $(shell if [ -d build ]; then echo "exist"; else echo "noexist"; fi)
COMPILE_TIME = $(shell date +"%Y-%m-%d %H:%M:%S")
#MAKEFILE_DIR:= $(abspath $(dir $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))) #makefile的位置
$(TARGET):$(OBJS)
-@echo ""
-@echo "compile_time: $(COMPILE_TIME)"
ifneq (exist,$(BUILD_EXIST))
@$(shell mkdir build)
@echo "build目录不存在,已自动生成"
endif
-@echo ""
-$(CXX) $^ $(CXXFLAGS) -o ./build/$@
@$(RM) $(OBJS)
@echo "----------------------Output----------------------"
@./build/$@
#清理
clean:
$(RM) ./build/$(TARGET) $(OBJS)
.PHONY:clean
快捷键设置Makefile
文件已经写好了,现在配置Vscode的编译运行快捷键。
Ctrl+Shift+P
,输入“打开键盘”//编译目录下所有.cpp文件
{"key": "f6", //可以自己修改快捷键
"command": "workbench.action.terminal.sendSequence",
"args": {"text": "make -f /home/roya/workSpace/Makefile clean && make -f /home/roya/workSpace/Makefile\r" //修改为你的路径
}
},
//只单独编译一个文件
{"key": "Ctrl+f6",
"command": "workbench.action.terminal.sendSequence",
"args": {"text": "make -f /home/roya/workSpace/Makefile clean && make -f /home/roya/workSpace/Makefile FILE_NUM=single\r" //修改为你的路径
},
},
同上,加入快捷键就好。新建一个终端,并将pwd
设置为当前打开的文件目录。
{"key": "alt+f6",
"command": "workbench.action.terminal.newWithCwd",
"args": {"cwd": "${fileDirname}"
}
},
好了,配置完成。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧