这次是介绍多个目录多个源文件的CMakeLists.txt
文件的编写。
课业繁多的十二月,鸽到现在才来写。
源文件代码
首先创建文件夹demo3
,文件树如下。BSP
文件夹是根目录demo3
的一个子目录,里面有整个工程需要用到的源文件third.cpp
和头文件third.h
。
demo3
├── another.cpp
├── another.h
├── BSP
│ ├── CMakeLists.txt
│ ├── third.cpp
│ └── third.h
├── build
├── CMakeLists.txt
└── main.cpp
先贴出所有的源文件跟头文件代码
根目录
main.cpp
:
#include <iostream>
#include "another.h"
#include "BSP/third.h"
using namespace std;
int main(void)
{
cout<<"this is main.cpp"<<endl;
another_cout();
third_cout();
return 0;
}
another.cpp
:
#include <iostream>
#include "another.h"
using namespace std;
void another_cout(void)
{
cout<<"this is another.cpp"<<endl;
cout<<"add another command"<<endl;
}
another.h
:
#ifndef __ANOTHER_H
#define __ANOTHER_H
void another_cout(void);
#endif
BSP
目录
third.cpp
:
#include <iostream>
using namespace std;
void third_cout(void)
{
cout<<"this is third.cpp"<<endl;
}
third.h
:
#ifndef __THIRD_H
#define __THIRD_H
void third_cout(void);
#endif
CMakeLists
这一次的main.cpp
里面有调用到BSP
子目录下的源文件third.cpp
里面的函数。所以根目录下的CMakeList.txt
会跟以往的不一样,内容如下。
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (demo3)
# 查找目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. dir_source)
# 添加BSP目录
add_subdirectory(BSP)
# 指定生成目标
add_executable(main_another_third ${dir_source})
# 添加链接库BSP
target_link_libraries(main_another_third BSP_lib)
这一次生成的可执行文件的名字可一看到叫做main_another_third
。相比较于上次的CMakeLists.txt
文件,我们多了两句命令。add_subdirectory(BSP)
和target_link_libraries(main_another_third BSP_lib)
。
第一句命令,很好理解,因为我们要用到BSP
目录下的东西所以添加BSP
子目录。
第二句命令,注意编写的规则,main_another_third
是我们的可执行文件,而BSP_lib
是一个关于BSP
里面内容的一个库,这个库怎么来的呢?别忘了BSP
目录下还有一个CMakeLists.txt
文件。
# BSP目录下的CMakeList.txt的内容
# 查找当前目录下的所有源文件,并将名称保存到 BSP_source 变量
aux_source_directory(. BSP_source)
# 指定生成 BSP_lib 链接库,跟根目录下的 CMakeLists.txt里面的链接库名称相对应
add_library (BSP_lib ${BSP_source})
可以看到通过add_library (BSP_lib ${BSP_source})
生成了我们想要的有关BSP
的库BSP_lib
。
编译执行
接下来的编译执行操作就跟之前一样,就不赘述了。
FEATURED TAGS
Ubuntu
markdown
stm32
OSDK
飞控
串口
Jscope
C
C++
bin
J-Flash
字符串
指针数组
malloc
vscode
svg
png
github
python
CMake
CMakeLists
Linux
拷贝构造函数
GIF
录屏
docker
操作系统
make
Makefile
文件操作
DSP
CCS
SQL
MySQL
shell
bochs
计算机网络
win10
SMTP
Socket
iOS
uxplay
投屏
证书错误
apt
nodesource
ELF
Typora
图床
fossil
sql
git
SecureCRT
windows
cygwin
blog
alsa
alsa-utils
alsa-lib
音频
USB
链接文件
内存
mmap
tcpdump
交叉编译
网络
防火墙
crontab
bond
Linux性能
udev
linux
pcie
wsl2
MMIO
wsl
qemu
raspi4
gdb
ssh
tun
tap
ifconfig
打印
gmac
phy
vim
组播
rock3a
win11
usb
sd
ubuntu
iptables
netfilter
wifi
veth
ipv6
wireshark
radvd
dhcpv6
dhcpv4
网络命名空间
br虚拟网卡
NDP
emmc
存储
raspi4b
baremental
jtag
buildroot
rootfs
ext4
调试
uboot
dropbear
raspi
ebpf
uart
baremetal
kernel
bringup
libbpf