CMake 之 BUILD_SHARED_LIBS 和 CMAKE_BUILD_TYPE 用法教程

简 述: 起源于 #2 ,发现debug 编译失败,而release 编译成功,根因为默认生成产物和预期不符,故提的一个 PR 。发现与之相关为 CMake 中 CMAKE_BUILD_TYPEBUILD_SHARED_LIBS 的两个变量知识点。


本文初发于 “偕臧的小站”,同步转载于此。


💻 win10 21H2 📎 Qt 5.12.11 📎 Visual Studio 2019


BUILD_SHARED_LIBS

是 add_library() 的一个全局标志,当 add_library() 没有指定 [STATIC | SHARED | MODULE] 是哪一个时,可以决定为生成 动态库 还是 静态库


Typical values:

  • ON: 让 add_library() 生成 .dll 动态库,对应 SHARED
  • OFF: 让 add_library() 生成 .lib 静态库,对应 STATIC ;默认值

CMake 代码如下,对应生成产物如图:

set(BUILD_SHARED_LIBS ON)                 # default is OFF
add_library(${PROJECT_NAME} ${SRCS_MAIN})

img


CMAKE_BUILD_TYPE

指定 生成产物 的构建类型。

Typical values:

  • Debug:详细调试信息
  • Release:无调试信息
  • RelWithDebInfo:带有调试信息的 Release,依旧可能又略微优化
  • MinSizeRel:没使用过

总结

对于生成 .dll/.lib 的项目而言:

  1. 推荐使用 add_library() 时不指定 STATIC | SHARED,而是由 BUILD_SHARED_LIBS 变量来控制。
  2. 同时又通过自定义宏来决定,生成的 .dll 是采用 __declspec(dllexport)__declspec(dllimport)

这部分,以及结合如何使用 .dll 后面单独详细讲解一篇。


附: 本篇对应的修改源码在此 CMakeLists.txt


系列地址

ExCMake

欢迎 star ⭐ 和 fork 🍴这个系列的 CMake 学习,附学习由浅入深的目录。

<think>嗯,用户遇到了Kioptrix Level 1靶场扫描无响应的问题,用的是NAT模式。首先,我需要回想一下常见的原因。可能网络配置有问题,比如虚拟机的网络设置是否正确,是否处于同一网段。然后,用户可能没关闭防火墙或者靶机没正确启动服务。另外,扫描参数是否正确也很重要,比如nmap的参数是否合适。 我记得之前看过引用里的内容,用户用了nmap的-sn参数扫描,但可能没正确指定目标IP。需要确认靶场的IP地址是否在同一个子网下。有时候虚拟机使用NAT模式可能需要端口转发或者检查虚拟网络编辑器的设置,比如VMware的NAT设置是否有问题。 另外,用户提到靶场比较古老,可能Apache服务的版本较低,是否兼容当前的环境?比如,是否因为服务未启动导致无法响应扫描。还要考虑主机防火墙是否阻止了连接,或者虚拟机的网络适配器是否正确连接。 可能的解决步骤包括:检查虚拟机网络配置,确认IP地址,使用正确的nmap参数(比如-p指定端口范围),关闭防火墙,重启服务等。此外,用户可能需要检查主机虚拟机之间的连通性,比如ping测试,或者使用ARP扫描来发现靶机。 需要注意的是,有些情况下NAT模式可能需要手动设置静态IP,或者检查DHCP分配。如果扫描时没反应,可能是靶机没有获取到正确的IP,或者主机无法路由到靶机的网络。这时候可能需要检查虚拟网络设置,确保NAT网络配置正确,或者尝试桥接模式看看是否是NAT模式的问题。 还有,用户是否在扫描时使用了正确的目标网段?比如,如果主机在192.168.1.x,而靶机可能分配到了不同的子网,比如192.168.152.x,这时候需要调整扫描的IP范围。此外,nmap的--min-rate参数可能在高版本中需要调整,或者结合其他参数如-Pn来跳过主机发现。 总结下来,解决方案的步骤应该是:确认网络配置、检查IP地址、调整nmap参数、关闭防火墙、验证服务状态,如果不行再考虑更换网络模式或检查虚拟网络设置。</think>### Kioptrix Level 1靶场扫描无响应解决方案 #### 1. 验证网络配置 - **检查虚拟机网络模式**:确认靶机攻击机(如Kali Linux)均设置为`NAT模式`,并在VMware/VirtualBox的虚拟网络编辑器中确保`NAT子网网段一致`(例如192.168.152.0/24)[^2] - **获取靶机IP**:在靶机启动后登录系统(默认账号`root`/空密码),执行`ifconfig`或`ip addr`获取实际分配的IP地址 #### 2. 优化扫描参数 ```bash nmap -sn 192.168.152.0/24 --min-rate 1000 # 快速扫描存活主机 nmap -Pn -p 1-65535 192.168.152.130 # 跳过主机发现,全端口扫描 ``` #### 3. 常见问题排查 | 问题类型 | 解决方案 | |---------|----------| | 防火墙拦截 | 靶机执行`service iptables stop`关闭防火墙 | | 服务未启动 | 检查`apache`状态:`service httpd status` | | ARP缓存问题 | 攻击机执行`arp-scan -l`扫描本地网络 | #### 4. 网络连通性验证 ```bash ping 靶机IP # 测试基础连通性 telnet 靶机IP 80 # 测试Web服务端口 tcpdump -i eth0 icmp # 抓包分析网络流量 ``` #### 5. 特殊场景处理 - **NAT模式失效**:尝试切换为`桥接模式`后重新扫描 - **DHCP未分配IP**:在VMware虚拟网络编辑器中重置NAT DHCP租约 - **虚拟机冲突**:关闭其他虚拟机避免IP冲突
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偕臧x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值