cmake mingw libws2_32

cmake + mingw项目在Windows平台上使用socket相关的功能时,需要链接libws2_32.a否则会报一堆的socket相关接口未定义;

在网上搜索到的方法:

在target_link_libraries(target xxx xxx)中增加:

$<$<BOOL:${MINGW}>:ws2_32>

该句的含义是:如果使用MINGW编译器,则添加 ws2_32 

参考下边的说明,可以对它做一下变形,使其判断MINGW并且WIN32

$<$<AND:$<BOOL:${MINGW}>,$<BOOL:${WIN32}>>:ws2_32>

这一句是

$<condition:true_string>        $<BOOL:string>       $<AND:conditions>

这三个指令的嵌套使用

$<BOOL:string>   ---  把string转换为0或1。

最终为0:

  • string is empty,
    string 是空的,

  • string is a case-insensitive equal of 0FALSEOFFNNOIGNORE, or NOTFOUND, or
    string 是不区分大小写的等于 0 ,FALSE,OFF, N , NO , IGNORE ,或 NOTFOUND 

  • string ends in the suffix -NOTFOUND (case-sensitive).
    string 以后缀结尾 -NOTFOUND (区分大小写)。

最终为1:

        其他任何情况。

 $<AND:conditions> --- conditions  是以逗号分隔的多个布尔表达式,因为必须有逗号,所以最少要有两个表达式。当所有布尔表达式都为 1 时,$<AND:conditions>最终为 1。

在我们这个例子中:conditions是  $<BOOL:${MINGW}>,$<BOOL:${WIN32} 

$<condition:true_string>  -- condition是一个条件生成器表达式,当然可能是嵌套的条件表达式。

如果condition 为 1,则最终结果为true_string ,如果计算结果为 0 ,最终结果为空字符串。

在我们这个例子中:

$<$<AND:$<BOOL:${MINGW}>,$<BOOL:${WIN32}>>:ws2_32>

用$<BOOL:${MINGW}>检测是否为mingw编译器

用$<BOOL:${WIN32}>检测是否为windows系统

用$<AND: >计算这两个结果

用$<condition:true_string>计算$<AND: >的结果来决定最终是否为 ws2_32

当编译器为mingw,系统为windows时,最终结果为 ws2_32

这是一个cmake的 生成器表达式,参考:

CMake(九):生成器表达式_cmake 生成器表达式_jjjstephen的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值