在CMakeLists.txt中添加源文件的几种方法

单个.cpp源文件的情况

用这段代码进行测试,CMake 中添加一个可执行文件作为构建目标:

#include <cstdio>

int main() {
    printf("Hello, world!\n");
}

指定源文件的时候可以有两种方式

在创建目标的时候直接指定源文件

add_executable(main main.cpp)

先创建目标,再添加源文件

add_executable(main)
target_sources(main PUBLIC main.cpp)

多个.cpp源文件的情况

.
├── CMakeLists.txt
├── main.cpp
├── other.cpp
└── other.h

使用target_sources直接添加

逐个添加即可:

add_executable(main)
target_sources(main PUBLIC main.cpp other.cpp)

通过设定变量,间接添加

使用变量来存储:

add_executable(main)
set(sources main.cpp other.cpp)
target_sources(main PUBLIC ${sources})
在使用变量的值时,要用美元符号 $加花括号来进行取值。

建议把头文件也加上,这样在 VS 里可以出现在“Header Files”一栏。

add_executable(main)
set(sources main.cpp other.cpp other.h)
target_sources(main PUBLIC ${sources})

使用GLOB自动查找

使用 GLOB 自动查找当前目录下指定扩展名的文件,实现批量添加源文件:

add_executable(main)
file(GLOB sources *.cpp *.h)
target_sources(main PUBLIC ${sources})

推荐启用 CONFIGURE_DEPENDS 选项,当添加新文件时,自动更新变量

add_executable(main)
file(GLOB sources CONFIGURE_DEPENDS *.cpp *.h)
target_sources(main PUBLIC ${sources})

源码放在子文件夹里怎么办?

.
├── CMakeLists.txt
├── main.cpp
└── mylib
    ├── other.cpp
    └── other.h

出于管理源码的需要,需要把源码放在子文件夹中。

想要添加在子文件夹中的源码有三种办法。

把路径名和后缀名的排列组合全部写出来(不推荐)·

虽然能用,但是不推荐。

add_executable(main)
file(GLOB sources CONFIGURE_DEPENDS *.cpp *.h mylib/*.cpp mylib/*.h)
target_sources(main PUBLIC ${sources})

用 aux_source_directory 自动搜集需要的文件后缀名(推荐)

add_executable(main)
aux_source_directory(. sources)
aux_source_directory(mylib sources)
target_sources(main PUBLIC ${sources})

通过 GLOB_RECURSE 自动包含所有子文件夹下的文件

add_executable(main)
file(GLOB_RECURSE sources CONFIGURE_DEPENDS *.cpp *.h)
target_sources(main PUBLIC ${sources})

GLOB_RECURSE 的问题

会把 build 目录里生成的临时 .cpp 文件(CMake会自动生成一些cpp文件用于测试)也加进来。

解决方案

  • 要么把源码统一放到 src 目录下,
  • 要么要求使用者不要把 build 放到和源码同一个目录里,

建议把源码放到 src 目录下。

CMake是一种跨平台的编译工具,可以用来快速构建不同平台的程序。CMake将源代码和目标文件的构建过程分离开来,使得开发人员能够更加方便地在不同平台上部署运行程序。 在开始编写CMakeLists.txt之前,需要先准备好需要构建的源代码,并了解好编译环境的设置。创建一个CMakeLists.txt文件后,需要在其指定需要编译的源文件、头文件路径、链接的库文件等信息。 对于一个CMake项目,通常需要添加以下内容: ```cmake cmake_minimum_required(VERSION 3.0) project(project_name) add_executable(target_name source_files) target_include_directories(target_name PRIVATE include_directories) find_package(library_name REQUIRED) target_link_libraries(target_name library_name) ``` 从以上代码可以看出,CMakeLists.txt主要由四部分组成:项目基本信息、可执行目标、头文件路径、库的链接。 在编写CMakeLists.txt时,需要注意以下几点: 1. 在指定源文件时,应该将所有的文件一一列出,避免使用通配符的方式指定,这样可以确保所有需要编译的文件都被包含进去。 2. 为了使可执行目标能够找到需要的库文件,需要将库文件的路径添加到link_directories()。 3. 对于复杂的项目,可以按照模块划分方式来构建,实现模块间的相互依赖。 4. CMakeLists.txt需要放在项目的根目录下,并在根目录下运行cmake命令,以生成构建文件。 总的来说,编写CMakeLists.txt需要理解CMake的工作原理和基本配置方法,以及掌握项目的构建流程和各项参数的设置方式,这样才能够顺利地完成项目的构建工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值