Cmake使用教程

参考说明

https://blog.zllcrm.org/2023/07/25/%E8%BD%BB%E6%9D%BE%E6%90%AD%E5%BB%BAUbuntu20.04%E8%99%9A%E6%8B%9F%E6%9C%BA+ROS2%E5%B9%B3%E5%8F%B0/

CMake使用文档
引言
本文旨在提供一个关于使用CMake进行项目构建的全面指南。文中将包括从环境搭建到高级配置的各个方面。

一、环境搭建
安装CMake
在Windows上,你可以从CMake的官方网站下载安装包。
在Linux上,使用包管理器进行安装,例如:sudo apt-get install cmake。
在macOS上,你可以使用Homebrew:brew install cmake。
验证安装
打开终端,输入 cmake --version,如果看到版本信息,则安装成功。

二、简单入门
2.1 项目结构
一个简单的CMake项目结构可能如下:

Copy code
MyProject/
|-- CMakeLists.txt
|-- main.cpp
2.2 示例源码
在CMakeLists.txt文件中:

Copy code
cmake_minimum_required(VERSION 3.10)
project(MyProject)
add_executable(MyProject main.cpp)
在main.cpp中:

Copy code
#include
int main() {
std::cout << “Hello, World!” << std::endl;
return 0;
}
2.3 运行查看
在终端中运行以下命令:

Copy code
mkdir build
cd build
cmake …
make
./MyProject
输出应该是 “Hello, World!”。

三、编译多个源文件
3.1 在同一个目录下有多个源文件
3.1.1 简单版本
3.1.1.1 项目结构

Copy code
MyProject/
|-- CMakeLists.txt
|-- main.cpp
|-- function.cpp
|-- function.h
3.1.1.2 示例代码
在CMakeLists.txt中:

Copy code
add_executable(MyProject main.cpp function.cpp)
3.1.1.3 运行查看
运行与第二节相同的构建和执行命令。

3.1.2 进阶版本
3.1.2.1 项目结构
与3.1.1.1相同。

3.1.2.2 示例源码
在CMakeLists.txt中:

Copy code
set(SOURCES main.cpp function.cpp)
add_executable(MyProject ${SOURCES})
3.1.2.3 运行查看
与3.1.1.3相同。

3.2 在不同目录下有多个源文件
3.2.1 项目结构

Copy code
MyProject/
|-- CMakeLists.txt
|-- main/
| |-- main.cpp
|-- function/
|-- function.cpp
|-- function.h
3.2.2 示例源码
在CMakeLists.txt中:

Copy code
add_executable(MyProject main/main.cpp function/function.cpp)
3.2.3 运行查看
与第二节相同的构建和执行命令。

四、项目级的组织结构
4.1 项目结构
在更大的项目中,你可能希望将代码分割为多个子目录。一个典型的项目结构可能如下:

Copy code
MyProject/
|-- CMakeLists.txt
|-- src/
| |-- main.cpp
|-- include/
| |-- MyHeader.h
|-- lib/
| |-- CMakeLists.txt
| |-- libsource.cpp
4.2 示例源码
在根目录下的CMakeLists.txt:

Copy code
cmake_minimum_required(VERSION 3.10)
project(MyProject)
add_subdirectory(lib)

include_directories(include)
add_executable(MyProject src/main.cpp)
target_link_libraries(MyProject MyLibrary)
在lib/CMakeLists.txt:

Copy code
add_library(MyLibrary libsource.cpp)
4.3 运行查看
与之前相似,构建和执行的命令也应该和之前一样。

五、动态库和静态库的编译控制
5.1 生成库文件
5.1.1 项目结构
类似于4.1节中描述的结构。

5.1.2 示例源码
要生成动态库,你可以在CMakeLists.txt中这样设置:

Copy code
add_library(MyDynamicLibrary SHARED libsource.cpp)
生成静态库:

Copy code
add_library(MyStaticLibrary STATIC libsource.cpp)
5.1.3 运行查看
你可以运行构建命令生成库文件,并通过指定库路径来链接它。

5.2 链接库文件
5.2.1 项目结构
与5.1.1相同。

5.2.2 示例源码
在CMakeLists.txt:

Copy code
target_link_libraries(MyProject MyDynamicLibrary)

Copy code
target_link_libraries(MyProject MyStaticLibrary)
5.2.3 运行查看
生成可执行文件后,你可能需要设置动态链接库路径来运行它。

六、条件编译
6.1 简单程序
6.1.1 项目结构

Copy code
MyProject/
|-- CMakeLists.txt
|-- main.cpp
6.1.2 示例代码
在CMakeLists.txt:

Copy code
option(USE_MY_OPTION “Use my custom option” ON)

if(USE_MY_OPTION)
add_definitions(-DUSE_MY_OPTION)
endif()
在main.cpp:

Copy code
#ifdef USE_MY_OPTION
// Some code
#endif
6.1.3 运行查看
与之前一样。

6.2 添加编译选项
6.2.1 生成部分指定bin或库文件
6.2.1.1 项目结构
与6.1.1相同。

6.2.1.2 示例源码
在CMakeLists.txt:

Copy code
if(USE_ANOTHER_OPTION)
add_executable(MyAnotherProject another_main.cpp)
endif()

6.2.1.3 运行查看
可以通过 -DUSE_ANOTHER_OPTION=ON 来指定编译选项。

6.2.2 编译部分代码
在CMakeLists.txt:

Copy code
if(USE_PARTIAL_CODE)
set(SOURCES main_partial.cpp)
else()
set(SOURCES main.cpp)
endif()

add_executable(MyProject ${SOURCES})
这样,就可以根据条件来编译不同的源文件了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值