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

CMake多目录场景下如何让Project2依赖并联动构建proto库

实现步骤

1. 修改根目录CMakeLists.txt

你之前仅将Project2添加为子目录,现在需要先把proto库所在的目录也声明为子目录,注意要放在Project2的子目录声明之前,确保依赖目标优先被处理:

# 保留原有其他配置不变
add_subdirectory(somePlace/someOtherPlace)
add_subdirectory(Project2)

2. 优化proto库的CMake配置(可选但推荐)

原有配置里的全局INCLUDE_DIRECTORIES作用域太宽,建议改成给proto库单独设置公开包含路径,依赖该库的目标会自动继承头文件搜索路径,不需要额外手动配置路径:

INCLUDE(FindProtobuf)
FIND_PACKAGE(Protobuf REQUIRED)
PROTOBUF_GENERATE_CPP(PROTO_SRC PROTO_HEADER some.proto)
ADD_LIBRARY(proto ${PROTO_HEADER} ${PROTO_SRC})
# 新增以下配置
target_include_directories(proto
    PUBLIC
        ${PROTOBUF_INCLUDE_DIRS}
        ${CMAKE_CURRENT_BINARY_DIR} # 生成的.pb.h文件存放在构建目录的对应子路径下
)

3. 修改Project2的CMakeLists.txt添加依赖

不需要额外新增add_executable/add_library命令,保留你原有Project2的目标声明(无论是可执行文件还是库)即可,只需要添加链接proto库的配置:
假设你的Project2是可执行目标,原有配置为add_executable(Project2 xxx.cpp xxx.hpp),在该声明之后添加以下内容:

target_link_libraries(Project2
    PRIVATE
        proto
        ${PROTOBUF_LIBRARIES}
)

如果Project2本身是库目标,根据你的业务需求把PRIVATE改成PUBLIC或者INTERFACE即可。

配置完成后重新生成构建系统,再执行make Project2时,CMake会自动识别依赖关系,先构建proto库再编译Project2,proto文件修改后也会自动触发代码重新生成、库编译、Project2重链接的全流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:12:03