C/C++自动化编译工具

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

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇