【发布时间】:2021-12-09 02:49:08
【问题描述】:
project
|------ CMakeLists.txt (The main Cmake)
|------ somePlace/someOtherPlace/CmakeLists.txt
| |----- some.proto (google proto files)
| |----- CMakeList.txt
|------ Project2/CmakeListst.txt
|----- .cpp files
|----- .hpp files
|----- CMakeList.txt
我的拓扑与上面类似,我的主 cmake 可以生成 cmake 文件,在主 cmake 之后我可以构建 Project2:
make Project2
我已将 Project2 作为子目录添加到主 cmake 中。我这里没有问题。但是当我运行make Project2 时,我还想与Project2 一起构建common/someplace/CmakeLists.txt。我也知道我可以通过 cmake 和 make 命令在其目录中构建common/someplace/CmakeLists.txt。你可以查看somePlace/someOtherPlace/CmakeLists.txt:
INCLUDE(FindProtobuf)
FIND_PACKAGE(Protobuf REQUIRED)
INCLUDE_DIRECTORIES(${PROTOBUF_INCLUDE_DIR})
PROTOBUF_GENERATE_CPP(PROTO_SRC PROTO_HEADER oamc_packets.proto)
ADD_LIBRARY(proto ${PROTO_HEADER} ${PROTO_SRC})
但是我希望 Project2 依赖 somePlace/someOtherPlace/CmakeList.txt 并与之一起构建。我该如何实现呢?
我应该使用add_executable/add_library 命令吗?问题是somePlace/someOtherPlace/CmakeLists.txt 创建了头文件和 cc 文件以及 .a 文件。
PS:如果需要,我可以提供更多信息。
【问题讨论】:
-
添加
common/someplace/作为子目录?并相应地在Project2的common/someplace的目标上添加一个依赖项 -
是的,我添加了 somePlace/someOtherPlace/ 作为子目录。但是如何在项目 2 中添加依赖项? @AlexeyLarionov
-
CMake 文件的目录结构对生成的构建系统的影响相对较小。你能说明哪些目标是在哪里定义的吗?目标由
add_executable和add_library定义(或者add_custom_target,如果你正在做一些奇特的事情......) -
@Botje 正如 AlexeyLarinov 的评论,我不能在我的 Project2 中添加一个依赖项吗?我相信它会为我做这件事,但是,我找不到适合我情况的合适的例子。我有几个嵌套的子目录,因为这个例子没有为我做:stackoverflow.com/questions/4905089/…
-
您可以添加一个依赖项,但您需要一个由
add_executable/add_library定义的目标,正如 Botje 建议的那样