CMake4-指令7:aux_source_directory【自动查找所有“源码文件”放入变量中】、file【自动查找所有“头文件”放入变量中】【添加头文件和源码文件后不用修改cmake代码】

在这里插入图片描述
在这里插入图片描述

aux_source_directory不添加头文件

在这里插入图片描述

一、问题背景

在同一目录下面,有多个源文件的时候,这个时候你不能都往下面第三条命令add_executable里面一直手动添加cpp源文件,那工作效率多低啊

cmake_minimum_required(VERSION 2.8)
project(main)
add_executable(main main.c test1.c)


这里就可以使用 aux_source_directory命令

​二、定义


aux_source_directory 查找在某个路径下的所有源文件

aux_source_directory(<dir> <variable>)

​搜集所有在指定路径下的源文件的文件名,并将输出结果列表储存在指定的变量中。

三、其他

aux_source_directory(. SRC_LIST):表示是把当前目录下的所有源文件都添加到源列表变量里面去,最后用add_executable(main ${SRC_LIST})把所有的源文件加工成目标文件main。

不过这方法也有它的缺点,就是把当前目录下的源文件都添加到变量SRC_LIST了。如果我们不需要一些文件,可以进行这样操作:

cmake_minimum_required(VERSION 2.8)
 
project(main)
 
set(SRC_LIST
        ./main.c
        ./test1.c
        ./test2.c
         )
 
add_executable(main ${SRC_LIST})

四、案例

1、案例01

文件目录如下:
​​
在这里插入图片描述
多个源文件下,可以写成

cmake_minimum_required(VERSION 2.8)
 
project(main)
 
# 查找当前目录下的所有源文件
# 并将名称保存到 SRC_LIST变量
aux_source_directory(. SRC_LIST)
 
add_executable(main ${SRC_LIST})

2、案例02

比如:因为项目中需要用到一个开源的编解码工具,这个工具里有近400个头文件和源文件,在写CMakelist的时候需要把这些头文件和源文件都写入到add_executable中,例如这样:
在这里插入图片描述

在这里插入图片描述
试了一下,果然可以,emmmmm…

aux_source_directory命令会查找指定目录下的所有源文件,然后将结果存进指定变量名,这里指定的变量名就是asn2017,只需要在包含的时候采用${指定变量名}的格式,方便很多!

3、案例03

#108auto_src_h/CMakeLists.h
#[[
108auto_src_h
    CMakeLists.txt
    main.cpp
    src
        xlog.cpp
        xthread.cc
        xtest.c
    include
        xlog.h
        xthread.hpp
]]

cmake_minimum_required(VERSION 3.20)
project("auto_src_h")

#头文件加载路径
set(INCLUDE_PATH  "./include")
include_directories(${INCLUDE_PATH})

# 找到当前目录(.)下源码写入M_SRC变量中
aux_source_directory("." M_SRC)
aux_source_directory("./src" SRC)

message("-----------------> M_SRC = ${M_SRC}")
message("-----------------> SRC = ${SRC}")

#读取所有的头文件
file(GLOB H_FILE "${INCLUDE_PATH}/*.h*")

message("-----------------> H_FILE = ${H_FILE}")

add_executable(${PROJECT_NAME} ${M_SRC} ${SRC} ${H_FILE})

在这里插入图片描述

(base) wyr@Beyond-PC:~/cpp_study/cmake_study/2-第2章CMake常用功能/27cmake自动载入项目源码文件/108auto_src_h$ cmake -S . -B build
-- The C compiler identification is GNU 11.3.0
-- The CXX compiler identification is GNU 11.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-----------------> M_SRC = ./main.cpp
-----------------> SRC = ./src/xlog.cpp;./src/xtest.c;./src/xthread.cc
-----------------> H_FILE = /home/wyr/cpp_study/cmake_study/2-第2章CMake常用功能/27cmake自动载入项目源码文件/108auto_src_h/./include/xlog.h;/home/wyr/cpp_study/cmake_study/2-第2章CMake常用功能/27cmake自动载入项目源码文件/108auto_src_h/./include/xthread.hpp
-- Configuring done
-- Generating done
-- Build files have been written to: /home/wyr/cpp_study/cmake_study/2-第2章CMake常用功能/27cmake自动载入项目源码文件/108auto_src_h/build
(base) wyr@Beyond-PC:~/cpp_study/cmake_study/2-第2章CMake常用功能/27cmake自动载入项目源码文件/108auto_src_h$ 



aux_source_directory — CMake 3.22.6 Documentation
aux_source_directory
cmake的aux_source_directory

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值