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

如何在CMake中为多个目标/可执行文件链接同一组库?

解决CMake多可执行文件重复链接库的简洁写法

针对多可执行文件需要链接同一组库的场景,有几种简洁的实现方式:

方式一:直接遍历目标列表(最常用)

先定义所有要生成的可执行目标名称,通过foreach循环一次性完成可执行文件创建和库链接操作,代码最简洁:

set(ALL_LIBS lib1 lib2 lib3)
# 定义所有可执行目标的名称列表
set(EXEC_TARGETS program1 program2 program3 program4)

foreach(TARGET IN LISTS EXEC_TARGETS)
    # 假设每个目标对应的源文件是「目标名.cpp」,如果不是可自行修改源文件名
    add_executable(${TARGET} ${TARGET}.cpp)
    target_link_libraries(${TARGET} PRIVATE ${ALL_LIBS})
endforeach()

方式二:适配源文件与目标名不匹配的场景

如果部分可执行文件的源文件不止一个,或者源文件名和目标名不一致,可以用配对列表的方式处理:

set(ALL_LIBS lib1 lib2 lib3)
# 按「目标名 源文件列表」的格式定义配对项
set(EXEC_TARGET_SOURCES
    program1 program1.cpp
    program2 program2.cpp utils.cpp
    program3 main_program3.cpp
)

# 遍历配对列表,每次提取目标名和对应的源文件
foreach(TARGET_INFO IN ZIP_LISTS EXEC_TARGET_SOURCES)
    list(GET TARGET_INFO 0 TARGET_NAME)
    list(REMOVE_AT TARGET_INFO 0)
    add_executable(${TARGET_NAME} ${TARGET_INFO})
    target_link_libraries(${TARGET_NAME} PRIVATE ${ALL_LIBS})
endforeach()

方式三:自定义封装函数

如果需要频繁创建这类可执行文件,可以封装一个自定义函数,把创建和链接逻辑打包:

set(ALL_LIBS lib1 lib2 lib3)

# 自定义函数:创建可执行文件并自动链接指定库
function(add_linked_executable TARGET)
    add_executable(${TARGET} ${ARGN})
    target_link_libraries(${TARGET} PRIVATE ${ALL_LIBS})
endfunction()

# 直接调用自定义函数创建可执行文件
add_linked_executable(program1 program1.cpp)
add_linked_executable(program2 program2.cpp)
add_linked_executable(program3 program3.cpp)
add_linked_executable(program4 program4.cpp)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:35:28