CMake如何生成makefile文件

CMake 是一个跨平台的构建系统生成工具,可以根据项目的配置生成特定平台的构建文件。要在一个项目中使用 CMake 生成 Makefile,按照以下步骤进行:

项目目录结构

假设你有以下项目目录结构:

MyProject
├── CMakeLists.txt
├── main.cpp
├── foo.cpp
└── bar.cpp

CMakeLists.txt 文件

首先在项目根目录(MyProject)中创建一个 CMakeLists.txt 文件。这个文件定义了项目相关的配置信息,比如项目名称、需要的 C++ 标准、源文件等。

CMakeLists.txt 内容示例:

# 指定所需的最低 CMake 版本
cmake_minimum_required(VERSION 3.10)

# 定义项目名称和语言
project(MyProject LANGUAGES CXX)

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

# 添加可执行文件及其源文件
add_executable(MyProgram main.cpp foo.cpp bar.cpp)

生成 Makefile

在生成 Makefile 之前,需要新建一个构建目录。在这个目录中执行 cmake 命令,这样可以保持源码目录的整洁。构建目录可以随意命名,不过一般叫做 build

步骤如下:

     1. 创建构建目录并进入构建目录:
mkdir build
cd build
     2. 运行 CMake 命令生成 Makefile:
cmake ..

这里的 .. 表示 CMakeLists.txt 文件所在的上级目录。运行这个命令后,CMake 会根据 CMakeLists.txt 的配置生成 Makefile 和其他所需的构建文件。

    3. 查看生成的构建文件:

运行完 cmake .. 命令后,在 build 目录中会看到生成的 Makefile 和其他一些文件和目录。这些文件和生成规则会根据你的 CMakeLists.txt 文件配置来生成。

编译项目

当 Makefile 生成完成后,可以直接使用 make 命令编译项目:

make

这个命令会根据 Makefile 中的规则编译你的项目,生成可执行文件。例如,在上面的例子中,会生成名为 MyProgram 的可执行文件。

清理构建文件

如果需要清理生成的构建文件,可以直接在构建目录中执行 make clean

make clean

当然,手动删除 build 目录也是可以的:

cd ..
rm -rf build

更多配置选项

CMake 提供了丰富的配置选项,可以通过修改 CMakeLists.txt 文件进一步定制,比如配置库文件、头文件搜索路径、编译选项等。

包含目录

如果项目有头文件,需要指定头文件目录,可以使用 include_directories 命令:

include_directories(${PROJECT_SOURCE_DIR}/include)
链接库

如果需要链接外部库,可以使用 target_link_libraries 命令:

target_link_libraries(MyProgram PRIVATE MyLib)

示例:更多高级用法

使用外部库

假设你的项目需要使用 Boost 库,可以使用 find_package 命令:

CMakeLists.txt 内容示例:

cmake_minimum_required(VERSION 3.10)
project(MyProject LANGUAGES CXX)

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

# 查找 Boost 库
find_package(Boost 1.70 REQUIRED COMPONENTS filesystem system)
if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
    add_executable(MyProgram main.cpp foo.cpp bar.cpp)
    target_link_libraries(MyProgram ${Boost_LIBRARIES})
endif()
自定义构建类型

可以定义不同的构建类型,如 Debug、Release:

# 设置默认生成类型为 Release
if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Release)
endif()

# 定义构建类型及其编译选项
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -O0 -g")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall -O3")

运行 CMake 时可以指定构建类型:

cmake -DCMAKE_BUILD_TYPE=Debug ..

总结

通过上述步骤,CMake 可以生成 Makefile,从而在 Unix/Linux 环境下使用 make 进行编译。CMake 提供了更高层次的抽象和灵活性,可以生成不同平台的构建文件,不仅限于 Makefile,这使得它成为跨平台项目构建的强大工具。

这些步骤和配置都可以根据项目的实际需求进行调整,以满足特定的构建需求。学习和掌握 CMake 的各种命令和选项,可以极大地提高项目构建和管理的效率。

CMake 生成 Makefile 的过程分为两个步骤: 1. 编写 CMakeLists.txt 文件 CMakeLists.txt 文件CMake 的配置文件,用于描述工程的源文件、编译选项、链接选项等信息。你需要在 CMakeLists.txt 文件中定义工程名称、源文件、头文件路径、库文件路径等信息。 以下是一个简单的 CMakeLists.txt 文件示例: ``` cmake_minimum_required(VERSION 3.10) project(MyProject) set(CMAKE_CXX_STANDARD 11) include_directories(include) add_executable(MyProgram src/main.cpp src/func.cpp) target_link_libraries(MyProgram m) ``` 在这个 CMakeLists.txt 文件中,首先指定了 CMake 的最低版本要求。然后定义了工程名称为 MyProject,并设置了 C++ 标准为 C++11。接着指定了头文件路径为 include 目录。然后定义了 MyProgram 目标,该目标依赖于 src/main.cpp 和 src/func.cpp 两个源文件,用于生成可执行文件 MyProgram。最后指定了链接库为数学库 libm。 2. 生成 Makefile 文件 在编写好 CMakeLists.txt 文件后,你可以使用 cmake 命令来生成 Makefile 文件。在命令行中进入工程目录,执行以下命令: ``` cmake -S . -B build ``` 其中,-S 参数指定了 CMakeLists.txt 文件所在的目录,-B 参数指定了构建目录。上述命令表示将 CMakeLists.txt 文件所在的当前目录作为源目录,将 build 目录作为构建目录。 执行完上述命令后,CMake生成 Makefile 文件并保存到 build 目录中。你可以进入 build 目录,执行 make 命令来编译工程。 ``` cd build make ``` 这样,就可以使用 CMake 生成 Makefile 文件,并编译生成工程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值