Makefile学习笔记(ubuntu18+vscode)

一、创建文件夹

mkdir learn_makefile

文件夹新建main.cpp文件

#include <iostream>
#include "functions.h"
using namespace std;

int main()
{
    printhello();
    cout << "This is main:" << endl;
    cout << "The factorial of 5 is: " << factorial(5) << endl;
    return 0;
}

factorial.cpp文件

#include "functions.h"

int factorial(int n)
{
    if(n == 1)
            return 1;
    else
            return n * factorial(n-1);
}

printhello.cpp文件

#include <iostream>
#include "functions.h"

using namespace std;

void printhello()
{
    int i;
    cout << "Hello world" << endl;
}

function.h文件

#ifndef _FUNCTIONS_H_
#define _FUNCTIONS_H_
void printhello();
int factorial(int n);
#endif

法一(不用makefile):

进入learn_makefile文件编译生成可执行程序文件main

cd learn_makefile
g++ main.cpp factorial.cpp printhello.cpp -o main
./main

生成内容如下

法二(创建Makefile文件):

version 1

Makefile文件写入以下代码:

# VERSION 1
# hello为生成的可执行文件,依赖于后面的三个.cpp文件
# g++前面加一个TAB的空格
hello: main.cpp printhello.cpp factorial.cpp
	g++ -o hello main.cpp printhello.cpp factorial.cpp
cd learn_makefile
make
./hello

 修改某个.cpp文件,再执行命令make,即可刷新可执行文件hello

缺点:文件多时,编译时间长

version 2

Makefile文件写入以下代码:

# VERSION 2
CXX = g++
TARGET = hello
OBJ = main.o printhello.o factorial.o
# make时执行g++ 先找TARGET,TARGET不存在找OBJ,OBJ不存在,编译三个.cpp文件生成.o文件
# 然后再编译OBJ文件,生成可执行文件hello
$(TARGET): $(OBJ)
	$(CXX) -o $(TARGET) $(OBJ)
# main.o这样来的,编译main.cpp生成
main.o: main.cpp
	$(CXX) -c main.cpp
printhello.o: printhello.cpp
	$(CXX) -c printhello.cpp
factorial.o: factorial.cpp
	$(CXX) -c factorial.cpp

version 3

Makefile文件写入以下代码:

# VERSION 3
CXX = g++
TARGET = hello
OBJ = main.o printhello.o factorial.o

# 编译选项,显示所有的warning
CXXLAGS = -c -Wall

# $@表示的就是冒号前面的TARGET,$^表示的是冒号后OBJ的全部.o依赖文件
$(TARGET): $(OBJ)
	$(CXX) -o $@ $^

# $<表示指向%.cpp依赖的第一个,但是这里依赖只有一个
# $@表示指向%.o
%.o: %.cpp
	$(CXX) $(CXXLAGS) $< -o $@

# 为了防止文件夹中存在一个文件叫clean
.PHONY: clean

# -f表示强制删除,此处表示删除所有的.o文件和TARGET文件
clean:
	rm -f *.o $(TARGET)

运行结果:

version 4

Makefile文件写入以下代码:

# VERSION 4
CXX = g++
TARGET = hello
# 所有当前目录的.cpp文件都放在SRC里面
SRC = $(wildcard *.cpp)
# 把SRC里面的.cpp文件替换为.o文件
OBJ = $(patsubst %.cpp, %.o,$(SRC))

CXXLAGS = -c -Wall

$(TARGET): $(OBJ)
	$(CXX) -o $@ $^

%.o: %.cpp
	$(CXX) $(CXXLAGS) $< -o $@

.PHONY: clean
clean:
	rm -f *.o $(TARGET)

运行结果:

笔记总结来源:Makefile 20分钟入门,简简单单,展示如何使用Makefile管理和编译C++代码_哔哩哔哩_bilibili

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sdl vscode是指在VSCode中使用SDL开发的一种方法。引用中提到了一个包含lvgl、lv_drivers、lv_examples子模块的完整示例代码,可以在GitHub上找到。如果你想编译和运行这个代码,可以根据引用中的建议编写一个makefile文件,并在其中添加编译和链接的指令。可以参考引用中给出的示例makefile代码。具体步骤如下: 1. 在你的电脑上建立一个文件夹来保存项目,并在VSCode中打开这个文件夹。 2. 创建一个名为main.c的文件,并将引用中给出的示例代码复制到这个文件中。 3. 在项目文件夹中创建一个名为makefile的文件,并将引用中的示例makefile代码复制到这个文件中。 4. 打开终端或命令提示符,并切换到项目文件夹所在的目录。 5. 运行make命令来编译代码,并生成可执行文件。 6. 运行生成的可执行文件来运行程序。 这样,你就可以在VSCode中使用SDL开发并编译运行代码了。注意,你需要根据你的具体环境配置makefile文件中的路径和编译选项。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [VSCode搭建LVGL模拟器环境示例(lv_sim_vscode_sdl)](https://download.csdn.net/download/p1279030826/33645406)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【学习笔记】VSCode+mingw+SDL2环境配置](https://blog.csdn.net/u011086331/article/details/91344258)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值