MakeFile

MakeFile和CMakeList有什么区别?

Makefile 和 CMakeLists.txt 是两种不同的构建系统,都是用来管理软件项目构建过程中的各个任务。

Makefile是一种基于文本的构建系统,它描述了项目的构建步骤,通常使用简单的语法指令来自动构建项目。Makefile是被广泛应用于Unix系统上的开源项目中,它是非常灵活和可扩展的,但是写起来有点困难,尤其是对于复杂的项目。

CMakeLists.txt是一种基于CMake的构建系统,它使用一种高级的语言描述项目的构建步骤,CMake可以根据操作系统和编译器环境自动生成相应的Makefile或其他构建系统文件。CMake是跨平台的,可以轻松地构建在各种操作系统和编译器环境中的项目,写起来也比较简单。

总的来说,如果您正在管理一个小型的项目,并且您很熟悉Makefile的语法,那么您可以使用Makefile来构建您的项目。但是,如果您正在管理一个大型的跨平台项目,那么您可能应该使用CMakeLists.txt来构建您的项目,因为它更加灵活.

话不多说,直接上代码!!

# 目标文件
TARGET = hello

# 编译器
CC = gcc

# 编译选项
CFLAGS = -Wall -O2

# 目标文件依赖的源文件
SOURCES = hello.c

# 构建目标
$(TARGET): $(SOURCES)
    $(CC) $(CFLAGS) -o $(TARGET) $(SOURCES)

# 清除中间文件
.PHONY: clean

clean:
    rm -f $(TARGET)

示例中的Makefile构建了一个叫做"hello"的程序,它依赖于名为"hello.c"的源文件。编译器是gcc,编译选项是"-Wall -O2"。使用"make"命令构建目标,使用"make clean"清除中间文件。(注意到上面代码中的.PHONY)

.PHONY是什么意思?

".PHONY"是在Makefile中的一个关键字,它用于指示Makefile中某个目标不是文件,而是一个虚拟目标。虚拟目标不会生成文件,而是触发执行其他操作,如调用命令或运行其他目标。

在这个例子中,"clean"是一个虚拟目标,执行"make clean"命令时,它会删除当前目录下的所有".o"文件。

使用".PHONY"可以防止当存在同名文件时,Makefile误判目标已经生成,从而避免错误的操作。

来点进阶用法吧!

# 目标文件
TARGET = program

# 编译器
CC = gcc

# 编译选项
CFLAGS = -Wall -O2

# 目标文件依赖的源文件列表
SOURCES = main.c helper.c

# 头文件路径
INCLUDES = -I./include

# 库文件路径
LDFLAGS = -L./lib

# 链接库
LIBS = -lm

# 构建目标
$(TARGET): $(SOURCES)
    $(CC) $(CFLAGS) $(INCLUDES) -o $(TARGET) $(SOURCES) $(LDFLAGS) $(LIBS)

# 清除中间文件
.PHONY: clean install uninstall
clean:
    rm -f $(TARGET)

# 安装
install:
    cp $(TARGET) /usr/local/bin

# 卸载
uninstall:
    rm -f /usr/local/bin/$(TARGET)

在这个示例中,我们构建了一个名为"program"的程序,它依赖于两个源文件:"main.c"和"helper.c",并链接到名为"libm"的库。编译选项、头文件路径、库文件路径和链接库也被指定。使用"make"命令构建目标,使用"make clean"清除中间文件,使用"make install"安装程序,使用"make uninstall"卸载程序。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值