1.Makefile
1.1 介绍
Makefile是Unix和Linux系统中用来自动化编译过程的一种工具。Makefile定义了一组规则,描述了如何生成目标文件。
优点:
简单:如果你只在一个Unix-like系统上编译你的项目,那么Makefile可能就足够了。
直观:Makefile的语法直观,易于理解。
缺点:
平台限制:Makefile通常只能在Unix-like系统上运行,例如Linux或者MacOS。在Windows上使用需要额外的工具或批处理脚本。
复杂性:如果你要处理多种编译器或者库,那么Makefile可能会变得很复杂。
1.2 语法简单规则
变量定义:可以使用变量来存储信息,如编译器路径、编译选项等,在后续的规则中使用。如:CC=gcc
规则:规则定义了如何从一组源文件生成目标文件,包括源文件的依赖关系和编译规则。规则通常由目标文件、依赖文件和操作符组成。
伪目标:伪目标是一种特殊的规则,它不会生成实际的文件,而是执行一些操作,如清理编译生成的临时文件。
注释:Makefile中的注释以“#”字符开头。
$@: 规则中的目标集合,在模式规则中,如果有多个目标的话,“ $@”表示匹配模式中定义的目标集合。
$<:依赖文件集合中的第一个文件,如果依赖文件是以模式(即“ %” )定义的,那么“ $<”就是符合模式的一系列的文件集合
$^:所有依赖文件的集合,使用空格分开,如果在依赖文件中有多个重复的文件,会去除重复的依赖文件,只保留一份。
$%:当目标是函数库的时候表示规则中的目标成员名,如果目标不是函数库文件,那么其值为空。
$?:所有比目标新的依赖目标集合,以空格分开。
$+:和“ $^”类似,但是当依赖文件存在重复的话不会去除重复的依赖文件。
1.3 简单示例
clac.c
#include "calc.h"
int add(int a,int b){
return a+b;
}
clac.h
extern int add(int a,int b);
main.c
#include<stdio.h>
#include "calc.h"
int main(){
printf("%d\n",add(10,23));
return 0;
}
Makefile
# 定义编译器路径和编译选项
CC = gcc
CFLAGS=-I/home/Code/Ccode/Test/mycalc/ -Wall -g
# 定义源文件和目标文件
SRCS = main.c calc.c #匹配目录下所有.c 文件,并将其赋值给SRC变量。
OBJS = $(SRCS:.c=.o) #函数有三个参数SRC中的所有值,将.c 替换为.o 最后赋值给OBJ变量。
# 定义规则
all: program
program: $(OBJS)
$(CC) $(CFLAGS) -o program $(OBJS)
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
.PHONY:clean
#删除中间文件
clean:
rm -rf $(OBJS)
2.Cmake
2.1 介绍
CMake是一个跨平台的自动化建构系统,它用配置文件控制编译过程,替代了传统的手动编译方式,使得开发者可以独立于特定的编译器和操作系统进行项目构建。
CMake并不直接编译或链接代码,而是通过生成Makefile(以及其他类型的构建文件)来指导编译过程。这些Makefile文件包含了针对特定平台的编译指令,它们由CMake根据配置文件生成。
基本使用步骤如下:
创建一个名为CMakeLists.txt的CMake配置文件,其中包含了关于如何构建你的项目的指令。
使用CMake命令行工具来检查你的CMakeLists.txt文件,并生成构建文件。这一步通常在命令行中进行,命令格式为cmake , 其中是你的源代码所在的路径。
使用上一步中生成的构建文件来编译你的项目。在Unix系统中,这可以通过在命令行中输入make或make all来完成。在Windows系统中,这通常通过在命令行或IDE中输入cmake --build .来完成。
2.2 简单示例
使用上面的代码
CMakeLists.txt:
# CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
#ExampleProject修改为自己的可执行文件名
project(ExampleProject)
# 添加源文件
set(SOURCE_FILES main.c calc.c)
# 添加头文件搜索路径
include_directories(${PROJECT_SOURCE_DIR})
# 添加构建目标
add_executable(ExampleProgram ${SOURCE_FILES})
2.3 运行
在终端中进入 build目录,并执行以下命令以生成构建文件:(生成一个名为 CMakeCache.txt 的文件和一些其他构建文件。)
mkdir build
cd build
cmake ..
编译并生成可执行文件:
cmake --build .
执行可执行文件:
./ExampleProgram