linux下g++、make、cmake编译工具代码实例

9 篇文章 0 订阅

前言

g++:c++编译器

make:批处理工具,通过makefile文件实现批处理,本质还是g++编译器进行编译

cmake:跨平台编译工具,通过CMakeLists.txt文件实现自动编译,本质还是转成makefile实现批处理

在这里插入图片描述

项目源码在上上一篇文章:
https://editor.csdn.net/md/?articleId=124302251

代码实例

这个例子比较简单,主要为了说明这三个工具的使用。

项目目录结构

在这里插入图片描述

g++方式

# 在项目根目录下执行
g++ -std=c++11 ./src/*.cpp -o ./bin/process01 -I ./include/ -L ../bin/

缺点:源代码多时,用gcc逐个去编译,工作量大、容易混乱,且不能实现自动编译

因此,产生了make方式。

make方式

在项目src目录下,创建makefile文件,文件内容如下:

TARGET=process
LIBS=-lpthread
OBJS=ProcessInfo.o main.o
CXXFLAGS=-I ../include/
LDFLAGS=-L ../bin/
OUTPUT_DIR=../bin

$(TARGET):*.cpp
	$(CXX) -std=c++11  $^ -o $(OUTPUT_DIR)/$@ $(LIBS) $(CXXFLAGS)

	@echo "$(TARGET) build success!"

clean:
	$(RM) $(OBJS) $(TARGET)

执行:

make

结果:
在这里插入图片描述
缺点:不可跨平台,且当工程非常大的时候,手写makefile也非常麻烦

所以,产生了cmake方式,也是我推荐和喜欢的方式

cmake方式

在项目根目录下创建CMakeLists.txt文件,内容如下:

# 设置CMake最小版本要求
CMAKE_MINIMUM_REQUIRED(VERSION 3.21)

# 设置项目名称
PROJECT(processInfo)

# 查找项目src目录下的所有源文件,并将名称保存到 DIR_SRCS变量
aux_source_directory(${PROJECT_SOURCE_DIR}/src DIR_SRCS)

# 设置包含的头文件路径
include_directories(${PROJECT_SOURCE_DIR}/include)

# 设置文件输出路径为工程目录下的bin文件下
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

# 指定生成目标
ADD_EXECUTABLE(processInfo ${DIR_SRCS})

执行(外部构建):

# 在当前目录下创建build目录
mkdir build

​# 进入build 目录
cd build​

# 编译上级的CMakeLists.txt,生成makefile
cmake ..# 执行make命令,生成目标
make

在这里插入图片描述
结果:

[root@localhost ProcessInfo]# tree
.
├── bin
│   └── processInfo
├── build
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   │   ├── 3.21.4
│   │   │   ├── CMakeCCompiler.cmake
│   │   │   ├── CMakeCXXCompiler.cmake
│   │   │   ├── CMakeDetermineCompilerABI_C.bin
│   │   │   ├── CMakeDetermineCompilerABI_CXX.bin
│   │   │   ├── CMakeSystem.cmake
│   │   │   ├── CompilerIdC
│   │   │   │   ├── a.out
│   │   │   │   ├── CMakeCCompilerId.c
│   │   │   │   └── tmp
│   │   │   └── CompilerIdCXX
│   │   │       ├── a.out
│   │   │       ├── CMakeCXXCompilerId.cpp
│   │   │       └── tmp
│   │   ├── cmake.check_cache
│   │   ├── CMakeDirectoryInformation.cmake
│   │   ├── CMakeOutput.log
│   │   ├── CMakeTmp
│   │   ├── feature_tests.bin
│   │   ├── feature_tests.cxx
│   │   ├── Makefile2
│   │   ├── Makefile.cmake
│   │   ├── processInfo.dir
│   │   │   ├── build.make
│   │   │   ├── cmake_clean.cmake
│   │   │   ├── compiler_depend.make
│   │   │   ├── compiler_depend.ts
│   │   │   ├── DependInfo.cmake
│   │   │   ├── depend.make
│   │   │   ├── flags.make
│   │   │   ├── link.txt
│   │   │   ├── progress.make
│   │   │   └── src
│   │   │       ├── Main.cpp.o
│   │   │       ├── Main.cpp.o.d
│   │   │       ├── ProcessInfo.cpp.o
│   │   │       └── ProcessInfo.cpp.o.d
│   │   ├── progress.marks
│   │   └── TargetDirectories.txt
│   ├── cmake_install.cmake
│   └── Makefile
├── CMakeLists.txt
├── include
│   └── ProcessInfo.h
├── makefile
└── src
    ├── Main.cpp
    └── ProcessInfo.cpp

13 directories, 40 files

问题

在使用cmake时,根据错误提示,找对应问题,如下例子:
在这里插入图片描述
根据提示,去对应行找出出错问题,如果一眼看不出来问题,可以尝试注释掉对应行内容,看是否还报错,从而确定是否是对应行错误,然后,具体排查报错原因,一般是语法错误或空格导致。

总结

在实际的项目中,推荐使用cmake方式进行项目构建,简单、跨平台。并且,采用cmake的外部构建方式,这样产生的构建文件不会污染项目结构。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值