

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

1394

被折叠的 条评论
为什么被折叠?



