一步一步学CMake 之 配置和构建C++ 工程

内容包含:

1. 准备源文件

2. 编写CMakeLists.txt文件

3. CMake构建

4. 中间生成文件


一步一步学 CMake 系列文章

第一篇:小试牛刀

1. 准备源文件

#include <cstdlib>
#include <iostream>
#include <string>

std::string say_hello() 
{ 
 return std::string("Hello, CMake world!"); 
}

int main() {
  std::cout << say_hello() << std::endl;
  return 0;
}

2. 编写CMakeLists.txt文件

# set minimum cmake version
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)

# project name and language
project(hello-world LANGUAGES CXX)

add_executable(hello-world hello-world.cpp)

3. CMake构建

mkdir -p build
cd build
cmake ..

    -- The CXX compiler identification is GNU 5.4.0
    -- Check for working CXX compiler: /usr/bin/c++
    -- Check for working CXX compiler: /usr/bin/c++ -- works
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/xwang/example/build


cmake	--build	.

    Scanning dependencies of target hello-world
    [ 50%] Building CXX object CMakeFiles/hello-world.dir/hello-world.cpp.o
    [100%] Linking CXX executable hello-world
    [100%] Built target hello-worl

在GNU/Linux,    CMake默认生成Makefiles来构建项目

4. 中间生成文件

Makefile:  包含make指令将会运行的一系列指令集。
CMakeFiles :    包含临时文件的文件夹,CMake用于检测操作系统、编译器等的类型。另外, 它还包含特定于项目的文件。
cmake_install.cmake :   这是一个CMake脚本,用于处理安装的规则,该脚本只会在安装阶段使用。
CMakeCache.txt :    缓存文件,该文件会在再次运行配置是使用。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个使用CMake构建C++工程的示例。 我们假设这个工程有如下目录结构: ``` . ├── CMakeLists.txt ├── include │ └── mylib.h ├── src │ ├── main.cpp │ └── mylib.cpp └── test ├── CMakeLists.txt └── mylib_test.cpp ``` 其中: - `include` 目录包含头文件 `mylib.h` - `src` 目录包含源文件 `main.cpp` 和 `mylib.cpp` - `test` 目录包含测试代码 `mylib_test.cpp` 下面是 `CMakeLists.txt` 文件的内容: ```cmake # 设置 CMake 最低版本需求 cmake_minimum_required(VERSION 3.10) # 设置项目名称和版本号 project(myproject VERSION 1.0) # 设置 C++ 标准 set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED True) # 添加一个库 target,包含 mylib.cpp 和 mylib.h add_library(mylib src/mylib.cpp include/mylib.h) # 添加一个可执行文件 target,包含 main.cpp,以及 mylib 库 add_executable(myapp src/main.cpp) target_link_libraries(myapp PRIVATE mylib) # 添加一个测试 target,包含 mylib_test.cpp,以及 mylib 库 enable_testing() find_package(GTest REQUIRED) add_executable(mylib_test test/mylib_test.cpp) target_link_libraries(mylib_test PRIVATE mylib GTest::GTest GTest::Main) add_test(NAME mylib_test COMMAND mylib_test) ``` 其中: - `cmake_minimum_required(VERSION 3.10)` 声明了本工程需要 CMake 最低版本 3.10。 - `project(myproject VERSION 1.0)` 声明了本工程的名称和版本号。 - `set(CMAKE_CXX_STANDARD 11)` 设置了 C++ 标准为 C++11。 - `add_library(mylib src/mylib.cpp include/mylib.h)` 添加了一个名为 `mylib` 的库 target,包含 `mylib.cpp` 和 `mylib.h`。 - `add_executable(myapp src/main.cpp)` 添加了一个名为 `myapp` 的可执行文件 target,包含 `main.cpp` 和 `mylib` 库。 - `enable_testing()` 启用了测试功能。 - `find_package(GTest REQUIRED)` 查找 Google Test 库。 - `add_executable(mylib_test test/mylib_test.cpp)` 添加了一个名为 `mylib_test` 的测试 target,包含 `mylib_test.cpp` 和 `mylib` 库。 - `target_link_libraries(mylib_test PRIVATE mylib GTest::GTest GTest::Main)` 将 `mylib` 和 `GTest` 库链接到 `mylib_test` 中。 - `add_test(NAME mylib_test COMMAND mylib_test)` 添加了一个名为 `mylib_test` 的测试。 现在你可以使用以下命令构建和运行工程: ```bash mkdir build cd build cmake .. make ./myapp ctest ``` `make` 命令将编译所有 target,并生成可执行文件和库文件。`./myapp` 命令将运行 `myapp` 可执行文件。`ctest` 命令将运行所有测试。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值