Linux工程管理

目录

一、Makefile

1.1.简要介绍

1.2.Makefile三要素和工作原理

1.3. 变量

二、CMake

2.1.简要介绍

2.2.CMake使用步骤

1.项目结构

2. 编写 CMakeLists.txt

3. 构建项目

4. 添加更多的源文件或库

5.运行和清理


一、Makefile

1.1.简要介绍

        “Makefile”是一个文本文件,用于定义和组织源代码的构建过程。它包含变量定义、规则和命令,描述了如何编译和链接源文件以生成可执行文件或其他目标。

        通过运行“make”命令,系统按照“Makefile”中的规则自动执行构建任务,提高项目的可维护性和构建效率。

简单Makefile示例:

解释:运行"make"命令如自动执行第一个目标所对应的命令,若要选择其中一个目标的命令,需使用“make+目标名”。

1.2.Makefile三要素和工作原理

目标、依赖和命令为Makefile的三要素,见下面示例: 

解释:运行“make”命令会执行第一个目标所对应的命令,但会检查有无依赖,有依赖的话会执行依赖所对应的命令。

解释:当你执行 make 命令时,Make 会依次检查 simple 目标的依赖项,并按顺序执行以下命令(如果需要):

  1. 如果 main.o 不存在或者 main.c 被修改,执行:

    gcc -o main.o -c main.c

  2. 如果 foo.o 不存在或者 foo.c 被修改,执行:

    gcc -o foo.o -c foo.c

  3. 最后执行:

    gcc -o simple main.o foo.o

通过这些步骤,最终生成可执行文件 simple

.PHONY解释:

        .PHONY是一个特殊的 Makefile 目标,用于声明某些目标是“伪目标”(phony targets)。伪目标并不对应于实际存在的文件,它们仅仅是为执行一些命令或规则而定义的目标。在这个例子中,clean 是一个伪目标,它用于删除编译生成的中间文件和可执行文件。

   .PHONY 是一种告诉 Make 目标不与实际文件关联的方式,使 Make 可以正确处理这些目标并避免文件冲突。它通常用于诸如 cleanallinstall 等目标,这些目标通常不生成实际文件,而是执行一些操作。

工作原理图如下所示: 

1

1.3. 变量

Ⅰ.普通变量使用见下面示例:

解释:如上面示例所示,CC、RM、EXE、OBJS都是变量,使用时需加上$(变量)。

Ⅱ.自动变量见下面示例:

输出:

  • $@:当前目标名称。
  • $^:所有依赖文件的列表。
  • $<:第一个依赖文件。

Ⅲ.wildcard 函数和 patsubst 函数的使用见下面示例:

 

解释:

         wildcard 函数是通配符函数,通过它可以得到我们所需的文件。形式:$(wildcard pattern)。
示例$(wildcard *.c) 会查找当前目录中所有以 .c 结尾的文件,并将这些文件名放入 SRCS 变量中。
        patsubst 函数是用来进行字符串替换的,其形式是:$(patsubst pattern, replacement, text)。
示例$(patsubst %.c,%.o,$(SRCS)) 会将 SRCS 中所有 .c 文件名替换为相应的 .o 文件名。 

二、CMake

2.1.简要介绍

        CMake是一个跨平台的开源构建工具,用于管理软件项目的构建过程。它通过简化项目的配置和构建过程,使得在不同操作系统和编译器上更容易地生成可执行文件、库文件和其他项目文件。

        CMake使用CMakeList.txt文件来描述项目的结构和构建规则。

2.2.CMake管理C++项目步骤

1.项目结构

把你的项目文件按下面结构放好:

MySimpleProject/
├── include/
│   └── MyFunctions.h
├── src/
│   ├── main.cpp
│   └── MyFunctions.cpp
└── CMakeLists.txt
  • include/MyFunctions.h: 头文件,声明一些函数。
  • src/MyFunctions.cpp: 源文件,定义头文件中的函数。
  • src/main.cpp: 主程序,调用 MyFunctions.cpp 中定义的函数。
  • CMakeLists.txt: CMake 配置文件

2. 编写 CMakeLists.txt

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

# CMake 最低版本要求
cmake_minimum_required(VERSION 3.10)

# 项目名称和版本号
project(MySimpleProject VERSION 1.0)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 包含头文件目录
include_directories(include)

# 指定源文件目录
set(SOURCES
    src/main.cpp
    src/MyFunctions.cpp
)

# 添加可执行文件
add_executable(MySimpleProject ${SOURCES})

# 链接库 (如果有依赖的库,比如 OpenCV)
# find_package(OpenCV REQUIRED)
# target_link_libraries(MyProject ${OpenCV_LIBS})

3. 构建项目

一旦你有了 CMakeLists.txt 文件,就可以通过以下步骤来构建你的项目:

Ⅰ.创建构建目录

  • 这种方法可以将构建文件和源代码分离,保持项目目录的整洁。
mkdir build
cd build

Ⅱ.运行 CMake 生成构建文件

  • 这一步将生成平台相关的构建文件。例如,在 Unix-like 系统上生成 Makefile
cmake ..

Ⅲ.构建项目

  • 如果你在 Unix-like 系统上,可以使用 make 命令构建项目。
make

Ⅳ.运行生成的可执行文件

  • 可执行文件通常在 build/ 目录下生成。
    ./MySimpleProject
    

4. 添加更多的源文件或库

如果你的项目包含多个源文件或使用第三方库,只需在 CMakeLists.txt 中添加相应的配置。例如:

set(SOURCES
    src/main.cpp
    src/other.cpp
)

# 如果使用外部库(如 OpenCV)
find_package(OpenCV REQUIRED)
target_link_libraries(MyProject ${OpenCV_LIBS})

5.运行和清理

  • 运行可执行文件:在 build/ 目录中找到生成的可执行文件并运行。
  • 清理构建文件:要清理构建目录,可以运行 make clean 或者直接删除 build 目录。
make clean
rm -rf build

 总结:

        CMake 是一个功能强大的工具,能够帮助你高效地管理 C++ 项目。通过编写 CMakeLists.txt 文件,你可以轻松地配置和构建跨平台的 C++ 项目,并集成各种外部库和依赖。随着项目的复杂度增加,CMake 提供了更多的灵活性,可以管理子项目、库等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值