cmake - CMake:基于标志的 target_link_libraries
问题描述
已经链接了 4 个库,如果 FLAG 为 ON,则希望链接一个新库。
target_link_libraries (lib1 lib2 lib3 lib4 ${CMAKE_DL_LIBS})
我希望它像
target_link_libraries (lib1 lib2 lib3 lib4 if(FLAG) lib5 endif() ${CMAKE_DL_LIBS})
反正有没有在 cmakelists.txt 中实现这个?
解决方案
只需使用多个target_link_library
命令。
例如,以下可用于为 unix 目标添加库
target_link_libraries (lib1 lib2 lib3 lib4 ${CMAKE_DL_LIBS})
if(UNIX)
target_link_libraries(lib1 lib5)
endif()
或者,您可以使用包含要包含的库的列表
set(LIBS lib2 lib3 lib4 ${CMAKE_DL_LIBS})
if(UNIX)
list(APPEND LIBS lib5)
endif()
target_link_libraries(lib1 ${LIBS})
从理论上讲,您也可以使用生成器表达式,但恕我直言,这将成为可读性最低的替代方案
target_link_libraries(lib1 lib2 lib3 lib4 ${CMAKE_DL_LIBS} $<$<BOOL:${UNIX}>:lib5>)
推荐阅读
- reactjs - 使用 Formik、Yup 和 React 进行异步验证
- python - 如何发布到 AWS IoT 作业
- azure-devops - 用于从外部站点创建分支的深层链接
- android - 如何为 API 级别 16 以上的所有设备发送本地通知?
- java - AssertJ:使用自定义比较器进行流畅的排序测试
- python - 使用 python/opencv/深度学习从图像中删除给定位置的徽标/水印
- postgresql - 使用函数和检查约束或约束触发器的多个表的外键?
- vb.net - 数据网格不显示表格内容
- python - 使用递归生成组合并跳过或删除项目
- actionscript-3 - AS3 如何根据用户用鼠标画线的位置找到贝塞尔曲线的控制点