CMakeLists.txt编写思路

    近期在linux编写CMakeLists.txt文件,整理了一些思路。

一、编写CMakeLists.txt的基本步骤和思路:

  1. 初始化CMake

    • 使用cmake_minimum_required指令指定CMake的最小版本要求,以确保兼容性。
    • 使用project指令定义项目名称和可选的语言。
  2. 设置变量

    • 使用set指令设置项目相关的变量,例如编译器标志、包含目录、库目录等。
  3. 添加子目录

    • 使用add_subdirectory指令包含项目中的子目录,这些子目录通常包含自己的CMakeLists.txt文件。
  4. 添加可执行文件或库

    • 使用add_executable指令添加可执行文件,并指定其源文件。
    • 使用add_library指令添加静态或共享库,并指定其源文件。
  5. 设置依赖关系

    • 使用target_link_libraries指令为目标添加必要的依赖库。
  6. 配置编译选项

    • 使用add_compile_optionsset指令添加编译器特定的优化或警告选项。
  7. 配置安装规则

    • 使用install指令配置项目文件的安装位置和规则。
  8. 测试

    • 如果项目包含测试,可以使用enable_testingadd_test指令来配置和添加测试。
  9. 清理和打包

    • 使用clean_policyconfigure_file等指令来清理构建环境或准备打包。

       还需要注意的是:清晰的逻辑结构,确保所有的依赖关系和构建步骤都被正确配置。此外,应该考虑到跨平台构建的需求,使用条件编译和检查来处理不同操作系统或编译器的特性差异。

二、示例

    展示了如何为一个包含单个可执行文件和一个静态库的项目配置CMake构建系统。

项目结构

假设有以下项目结构:

MyProject/
├── CMakeLists.txt
├── src/
│   └── main.cpp
└── lib/
    └── math_utils.cpp
    └── math_utils.hpp
CMakeLists.txt内容

在项目的根目录下创建CMakeLists.txt文件,并填写以下内容:

cmake_minimum_required(VERSION 3.21)
project(MyProject)

# 设置变量指向源代码和头文件目录
set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(HEADERS_DIR ${SOURCE_DIR}/src)
set(LIBS_DIR ${SOURCE_DIR}/lib)

# 添加源文件到变量中
aux_source_directory(src SRC_LIST)
aux_source_directory(lib LIB_LIST)

# 创建可执行文件
add_executable(my_program ${SRC_LIST})

# 创建静态库
add_library(math_utils STATIC ${LIB_LIST})

# 将静态库链接到可执行文件
target_link_libraries(my_program math_utils)
构建说明
  1. cmake_minimum_required指定了CMake的最小版本要求,以确保兼容性。
  2. project定义了项目名称。
  3. set指令用于设置项目相关的变量,指向源代码和头文件目录。
  4. aux_source_directory命令递归地查找指定目录下的源文件,并将它们添加到列表变量中。
  5. add_executableadd_library分别用于创建可执行文件和静态库,并指定它们的源文件列表。
  6. target_link_libraries用于将静态库链接到可执行文件。
编译项目

在终端中,进入项目的根目录,创建一个名为build的目录,并在该目录中运行CMake来配置项目:

mkdir build
cd build
cmake ..

之后,运行make来编译项目:

make

编译完成后,可执行文件my_program将位于build目录下,您可以通过以下命令运行它:

./my_program

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CMakeLists.txt是用于构建CMake项目的配置文件。它描述了项目的源代码、依赖项和构建规则等信息。下面是一个基本的CMakeLists.txt文件的示例: ```cmake cmake_minimum_required(VERSION 3.10) # 指定CMake的最低版本要求 project(MyProject) # 设置项目名称 # 添加源代码文件 add_executable(MyExecutable example_person.cpp) # 添加依赖库 add_subdirectory(proto_pb2) add_subdirectory(proto_buf) # 设置头文件搜索路径 include_directories(include) # 设置库文件搜索路径 link_directories(lib) # 链接依赖库 target_link_libraries(MyExecutable ProtoBuf) # 设置编译选项 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") # 设置安装规则 install(TARGETS MyExecutable DESTINATION bin) ``` 上述示例中,我们首先指定了CMake的最低版本要求为3.10,并设置了项目名称为"MyProject"。然后,我们使用`add_executable`命令添加了一个名为"MyExecutable"的可执行文件,并将源代码文件"example_person.cpp"与之关联。 接下来,我们使用`add_subdirectory`命令添加了两个子目录"proto_pb2"和"proto_buf",用于构建这两个子目录中的项目。 然后,我们使用`include_directories`命令设置了头文件搜索路径,将"include"目录添加到搜索路径中。 使用`link_directories`命令设置了库文件搜索路径,将"lib"目录添加到搜索路径中。 使用`target_link_libraries`命令将依赖库"ProtoBuf"链接到"MyExecutable"可执行文件上。 使用`set`命令设置了编译选项,将C++标准设置为C++11。 最后,使用`install`命令设置了安装规则,将"MyExecutable"可执行文件安装到"bin"目录下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值