You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CMake生成器表达式合并多个可执行文件的链接库语句?

用CMake生成器表达式批量为多个可执行文件链接库

问题场景

我定义了若干个可执行文件:

add_executable(exe1 ${DRIVERS_DIR}/exe1.cpp)
add_executable(exe2 ${DRIVERS_DIR}/exe2.cpp)
add_executable(exe3 ${DRIVERS_DIR}/exe3.cpp)

目前需要为这些可执行文件统一链接同一个库,写法是重复调用target_link_libraries:

target_link_libraries(exe1 ${LIB_NAME})
target_link_libraries(exe2 ${LIB_NAME})
target_link_libraries(exe3 ${LIB_NAME})

如何用生成器表达式将这三条语句替换为单条语句?

解决方案

你可以通过set_property结合生成器表达式实现单条语句批量设置链接库:

覆盖原有链接库配置

set_property(TARGET exe1 exe2 exe3 PROPERTY LINK_LIBRARIES $<1:${LIB_NAME}>)

追加链接库(不覆盖原有配置)

如果目标已经有其他链接库,需要追加而非覆盖,使用APPEND关键字:

set_property(TARGET exe1 exe2 exe3 APPEND PROPERTY LINK_LIBRARIES $<1:${LIB_NAME}>)

其中$<1:${LIB_NAME}>是生成器表达式,$<1:...>表示无条件展开后续内容,确保链接库名称在CMake配置阶段正确传递给所有指定的可执行目标。

更灵活的目标集合管理

若后续可能新增可执行目标,可先将所有目标存入变量,再统一处理:

set(EXE_TARGETS exe1 exe2 exe3)
set_property(TARGET ${EXE_TARGETS} APPEND PROPERTY LINK_LIBRARIES $<1:${LIB_NAME}>)

内容的提问来源于stack exchange,提问作者user2052436

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 09:18:26