一.文件组成:

  • .h头文件,存放用到的库文件、各种函数声明、宏定义
  • .c源文件,存放代码,大致分为main.c和其他function.c,main.c放main函数,同时要引用头文件
  • Makefile文件

二. Makefile的基本语法(少用)

  • 变量定义:在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点像C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。

  • 显式规则:显式规则说明了如何生成一个或多的的目标文件。这是由Makefile的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。 刚才写的全部都是显示规则。

  • 隐晦规则:由于我们的make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写Makefile,这是由make所支持的。

  • 文件指示:其包括了三个部分: 一个是在一个Makefile中引用另一个Makefile, 就像C语言中的include一样; 另一个是指根据某些情况指定Makefile中的有效部分, 就像C语言中的预编译#if一样; 还有就是定义一个多行的命令.

  • 注释:与python相同,#后面的均是注释内容

  • 一些预定义变量的介绍

    • $*   不包含扩展名的目标文件名称。
    • $+   所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。
    • $<   第一个依赖文件的名称。
    • $?   所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。
    • $@   目标的完整名称。
    • $^   所有的依赖文件,以空格分开,不包含重复的依赖文件。
    • $% 如果目标是归档成员,则该变量表示目标的归档成员名称
  • 参考代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CXX = gcc     #确定编译器是gcc,先把它写在一个变量里,后面如果想要改编译器的话直接改CXX这个变量的value就可以
TARGET = main #确定最后生成可执行文件的名称,也是方便后续更改所以放在一个变量里
SRC = $(wildcard *.c) #开始抽象了,这里wildcard是通配符,表示“*”这个符号具有通配符的功能,*.c可以表示当前目录下的所有.c文件,$()表示括号内的内容是SRC所表示的部分
OBJ = $(patsubst %.c, %.o, $(SRC)) #更抽象了,这里patsubst是一个把SRC中所有的.c文件替换成.o文件的函数

CXXFLAGS = -c -Wall #这句话的意思是用CXXFLAGS这个变量去替换-c -Wall这两个命令,-c是编译compile,-Wall是显示所有的warning(例如变量未使用之类的)

$(TARGET): $(OBJ) #这两行的意思是,TARGET是依赖于OBJ的,也就是最后的.exe文件依赖于所有的.o文件,下面的$@表示目标文件,$^表示所有的依赖文件,%<表示第一个依赖文件,这两行翻译过来就是:gcc main.c print.c print1.c -c,也就是把所有的.c文件全都编译
$(CXX) -o $@ $^
#这两行翻译过来就是:gcc -c -Wall main.o print.o print1.o -o main
%.o: %.c
$(CXX) $(CXXFLAGS) $< -o $@
#.PHONY表示后面那个目标(这里就是clean)是个伪文件目标,也就是说它没有依赖文件,是一个只执行的命令,不会出现对应的clean文件
.PHONY: clean
#说明clean这个命令具体要干什么事情,下面那一行表示把TARGET下所有的.o文件都删除,方便下一次更改文件后重新编译
clean:
rm -f *.o $(TARGET)

三.Cmake(用的多)

1. 创建项目,项目结构一般包含:

  • .vscode

  • bin文件夹 存放二进制文件

  • build文件夹 存放编译过程中产生的中间文件

  • doc文件夹 存放相关文档

  • inc文件夹 存放头文件(.h文件)

  • lib文件夹 存放库文件

  • src文件夹 存放源代码文件(.c文件)

  • CMakeLists.txt Cmake配置文件

2.创建CMakelists.txt,内容可以参考如下:

1
2
3
4
5
6
7
8
9
10
11
cmake_minimum_required(VERSION 3.10)#最小版本要求

project (main)

set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

aux_source_directory (src SRC_LIST)

include_directories (inc)

add_executable (main ${SRC_LIST})

3. 在cmake插件的状态栏里点击“生成”,然后”在终端中运行
4.上传github仓库:

法一:git上传

先在指定文件夹中git bash here:

  1. 将远程仓库的文件拷贝到本地使用命令:
    git clone 链接

  2. 上传文件到仓库:
    git add .
    git commit -m ‘注释’
    git push -u origin main

法二:gitlens插件

  1. 打开状态栏的gitlens插件,加号将更改暂存

  2. 点提交后同步即可
    gitlens使上传速率大大提高,并图形化了过程

法三:githubdesktop

直接在githubdesktop里打开对应的仓库的文件夹。文件有变动之后add、commit、push即可